この記事ではPythonを使用してフォルダ内のすべての画像を一括でトリミングする方法、およびダイアログを使用して複数の画像を選択し、マウスドラッグでトリミング範囲を指定して自動トリミングする方法について解説していきます。
ポイントとしては`glob`, `PIL`, `tkinter`, `os`などを使用することです。
なお、下記の解説では完全な初心者でもわかりやすいように、あえて変数名を少々変わった名称にしています。そのため、ご活用の際には、適切な英語表記に変更してくださいね。
それでは詳しく見ていきましょう!
Pythonでフォルダ内のすべてのpng画像を領域指定し自動トリミングし別名保存する方法
それではまず、フォルダ内のすべてのpng画像を領域指定し自動トリミングし別名保存する方法について解説していきます。
jupyter notebookなどの各開発環境を開いて、以下コードをコピペしましょう。
import glob
from PIL import Image
# 画像のトリミング範囲を設定 (左上のX座標, 左上のY座標, 右下のX座標, 右下のY座標)
# ここでは左上から縦横1cm,2cmを始点として、縦横3cm,4cmまで切り取ります(解像度300dpiを仮定)
kiritorihani = (1 * 300, 2 * 300, 4 * 300, 6 * 300)
# 指定したフォルダ内のpng画像を検索
for gazoPath in glob.glob('folderPath/*.png'):
with Image.open(gazoPath) as img:
# 画像をトリミング
trimmed_img = img.crop(kiritorihani)
# トリミングした画像を別名で保存
trimmed_img.save(gazoPath.replace('.png', '_trimmed.png'))
このコードは、指定したフォルダ内のすべてのpng画像を特定の範囲でトリミングし、元のファイル名に`_trimmed`を付け加えた新しいファイル名で保存します。
`glob`モジュールを使ってフォルダ内のpng画像を検索し、`PIL`ライブラリ(Python Imaging Libraryの後継、Pillow)の`Image`クラスを使用して画像を読み込み、指定した範囲でトリミング、そして保存します。
【使用関数名】`glob.glob`, `Image.open`, `img.crop`, `trimmed_img.save`
なお、上のライブラリglobやPILなどが入っていない場合には、pip install~~を用いて、適宜インストールした上で対応してくださいませ。
Pythonでダイアログで指定した複数のjpeg画像でマウス操作を使って、自動トリミングする方法
続いては、ダイアログで指定した複数のjpeg画像でマウス操作を使って、自動トリミングする方法について解説していきます。
jupyter notebookなどの各開発環境を開いて、以下コードをコピペしましょう。
import tkinter as tk
from tkinter import
filedialog
from PIL import Image
def kiritori_mouse_drag(event):
global start_x, start_y
start_x, start_y = event.x, event.y
def kiritori_mouse_release(event):
global start_x, start_y
end_x, end_y = event.x, event.y
kiritorihani = (start_x, start_y, end_x, end_y)
trimmed_img = img.crop(kiritorihani)
trimmed_img.save('trimmed_image.jpeg')
# ファイル選択ダイアログを開く
root = tk.Tk()
root.withdraw() # Tkのウィンドウを表示しない
file_paths = filedialog.askopenfilenames(filetypes = [('JPEG files', '*.jpeg')])
for gazoPath in file_paths:
img = Image.open(gazoPath)
img.show()
img.bind('', kiritori_mouse_drag)
img.bind('', kiritori_mouse_release)
このコードでは、tkinterを使用してファイル選択ダイアログを開き、ユーザーが複数のjpeg画像を選択できるようにします。
選択された各画像に対して、マウスでドラッグしてトリミング範囲を指定し、マウスボタンを離すことでその範囲でトリミングし、新しいファイルとして保存します。
マウス操作をそのまま数値化して画像トリミングできるので直観的に扱いやすいと思います。
【使用関数名】`filedialog.askopenfilenames`, `Image.open`, `img.show`, `img.crop`, `trimmed_img.save`
まとめ Pythoで画像のトリミング(範囲指定:マウスドラッグで自動操作:一括など)方法【フォルダ内のすべてや複数】
この記事では、画像のトリミングを一括処理(保存:範囲指定:マウスドラッグで自動操作など)方法【フォルダ内のすべてや複数】について確認しました。
Pythonの扱いになれ、さらに快適な生活を送っていきましょう。
コメント