#概要
たくさんの画像から指定された座標をトリミングするpythonスクリプトを書きました。
#背景
Web会議の画面をスクショするときに、議論に遅れないようにとりあえず全画面スクショするのですが、あとで人に共有するときには、ツールバーなど画面上の余計な情報は消したいので、作りました。
数枚程度ならMacのプレビューなどでやってもよいですが、しばしば100枚くらいのオーダーになるので、プログラムで一括でできると便利だと思いました。
#環境
macOS Catalina 10.15.7
python 3.8.0
#インストール
pip install Pillow
今回はPillowを使います。OpenCVでもできます。
#コード
# -*- coding: utf-8 -*-
import sys
from PIL import Image
import os
#トリミング前の画像の格納先
ORIGINAL_FILE_DIR = "./org_data/"
#トリミング後の画像の格納先
TRIMMED_FILE_DIR = "./cut_data/"
#画像パスと、左上座標、右下座標を指定して、トリミングされたimageオブジェクトを返す。
def trim(path, left, top, right, bottom):
im = Image.open(path)
im_trimmed = im.crop((left,top,right,bottom))
return im_trimmed
if __name__ == '__main__':
#もしトリミング後の画像の格納先が存在しなければ作る
if os.path.isdir(TRIMMED_FILE_DIR) == False:
os.makedirs(TRIMMED_FILE_DIR)
#トリミングする左上の座標
left, top = 0, 50
#トリミングする右上の座標
right, bottom = 2880, 1800
#画像ファイル名を取得
files = os.listdir(ORIGINAL_FILE_DIR)
#特定の拡張子のファイルだけを採用。実際に加工するファイルの拡張子に合わせる
files = [name for name in files if name.split(".")[-1] in ["png","jpg"]]
for val in files:
#オリジナル画像へのパス
path = ORIGINAL_FILE_DIR + val
#トリミングされたimageオブジェクトを取得
im_trimmed = trim(path, left, top, right, bottom)
#トリミング後のディレクトリに保存。ファイル名の頭に"cut_"をつけている
im_trimmed.save(TRIMMED_FILE_DIR+"cut_"+val, quality=95) #qualityは95より大きい値は推奨されていないらしい
実際に使うときは、トリミング前、後の画像の格納先を用意し、ディレクトリをソースコード中で相対パスで指定してください。
その後プログラムを実行してください。
#おわりに
スクショをとるときにいちいち領域を選択するのは、枚数が多くなると面倒なので、全画面スクショしてあとから切り取る、というのは割と需要があるかと思います。
僕はWeb会議の画面をスクショして、この方法でトリミングしたあとに、pythonでパワーポイントに貼り付けました。
なにかのお役に立てれば幸いです。