LoginSignup
4
8

More than 3 years have passed since last update.

画像を一括でトリミング【python】【Pillow】

Last updated at Posted at 2020-12-16

概要

たくさんの画像から指定された座標をトリミングする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でパワーポイントに貼り付けました
なにかのお役に立てれば幸いです。

4
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
8