Pythonで画像を半分に切り抜きたい

Python

半分のイメージ

画像を半分にするコードを作ってみました。半分のサイズではなく、指定した画像のうち左半分、もしくは右半分にするプログラムです。

画像処理ライブラリ

Pillowのインストール

画像を編集するのに便利なライブラリPillow(python-pillow / Pillow | GitHub https://github.com/python-pillow/Pillow)を使います。

pip install Pillow

画像を開く

 img = Image.open(img_path) 

openメソッドの引数に処理する画像のファイルパスを渡します。なお、openと見るとwithを使ったりやcloseしたくなりますが、Image.openの中で適切に処理しているようなので不要です。Javaとかだとtry-catchでfinallyで必ずclose処理していたので不安になりますよね。ただし、PythonでもFile.openしたものはcloseする必要があるので、close処理が必要かどうかはライブラリによりけりです。

画像のサイズを取得する

画像からサイズ(幅や高さ)を取得するには以下のようにします。

w, h = img.size

タプルで幅と高さを返してくれます。今回は右もしくは左半分のみにする予定なのでここで取得した幅を2で割った値を使います。

画像を切り取る

画像の切り取りは以下のようにします。

crop_img = img.crop((left, top, right, bottom))

cropメソッドにタプルで切り取り範囲を渡します。leftとtopで開始位置(左上)を指定し、rightとbottomで終了位置(右下)を指定します。コマンドラインの引数によってどちらを切り取るかが変わるので、leftとrightは引数によって変わります。topは必ず一番上ですので0、bottomも常に一番下ですので前項で取得したhを指定します。

画像を保存する

crop_img.save(new_file_path, quality=95)

第1引数に保存先のパスを、第2引数にクオリティを設定します。

quality

The image quality, on a scale from 1 (worst) to 95 (best). The default is 75. Values above 95 should be avoided; 100 disables portions of the JPEG compression algorithm, and results in large files with hardly any gain in image quality.

https://pillow.readthedocs.io/en/5.1.x/handbook/image-file-formats.html

1~100までを設定できますが、最大値は95までが良いとのことです。ちなみに数値が高いほど保存したファイルのサイズが大きくなります。

コマンドライン引数の扱い

コマンドラインに引数をとるにはsysのargvを使います。

import sys
sys.argv

sys.argv[0]は実行ファイル名が取れるので、実際に使うのは配列の1番目以降です。

プログラムの全体