【Python】Pillowで画像を切り抜き(トリミング)

スポンサードリンク
Python
過去の自分
過去の自分

取引先から送られてきた画像なんだけど、
余白が大きすぎる…。
Pillowで中央部分だけ切り抜きすることはできないの?

余白が大きくて切り抜きたい画像
今の自分
今の自分

なるほど…。
では今回は、「Pillowで画像を切り抜きする方法」
できるだけわかりやすく解説いたします。
画像のどの場所でも切り抜きすることができますよ。
また、「複数の画像を切り抜きする方法」
紹介いたしますので、ぜひ最後まで読んでいってください。

著者情報
スポンサードリンク

PythonのPillowで画像を切り抜き(トリミング)する方法

「crop」を使います。まずは全コードと実行結果をお見せします。
解説は後ほど行います。

全コード

import PIL
from PIL import Image

input_img = Image.open('C:/Utatane/input_img.jpg')

output_img = input_img.crop((100, 100, 500, 500))

output_img.save('C:/Utatane/output_img.jpg')
output_img = input_img.crop((100, 100, 500, 500))

実行結果

切り抜いた実行見本

事前準備

  • Pillowのインストール

画像を加工したり編集したりするには「Pillow」のインストールが必要です。

Pillowのインストール方法

Pillowを初めて使用する場合は、下記コードを入力・実行して、インストールしてください。

pip install Pillow

※Pillowを使用したことがある場合は、このインストール作業は不要です。

インストールに関する詳細や、インストールができなかった場合の対処法は下記記事で解説しております。
また、Pillowの簡単な使い方も紹介しておりますのでご参考ください。

解説

※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。

インポート方法、画像の取り込み・保存などの基本的な使い方は、インストールの記事をご参考ください。

画像の切り抜き(トリミング)

output_img = input_img.crop((100, 100, 500, 500))

上記一文にて、画像の任意の場所を切り抜きすることができます。

まず、新しい変数を書いたら、「=(イコール)」を書きます。

変数名の付け方や、変数の性質については、下記記事をご参考ください。

イコールの後に、「取り込んだ画像を代入した変数」に続けて「.crop()」を書いてください。
()内に、切り抜きする位置(ピクセル:px)を指定したら完了です。
※()は二重になっていますのでご注意ください。

切り抜きする位置は、「左上」と「右下」の2ヶ所です。
今回は「左上:100, 100」pxと「右下:500, 500」pxを指定しました。

切り抜き位置の説明

元データが600×600pxなので、切り抜き後の画像は、400×400pxになります。

数値的にわかりずらいですが、()内は、
左上X軸方向」「左上Y軸方向」「右下X軸方向」「右下Y軸方向」の順です。

<テンプレ>
【 新しい変数 = 取り込み時の変数.crop((左上X軸方向, 左上Y軸方向, 右下X軸方向, 右下Y軸方向)) 】


右下の指定ですが、600以上の場所を指定してもエラーにはなりません。
しかしながら、下図のように黒い部分がでてきてしまうのでご注意ください。

output_img = input_img.crop((100, 100, 650, 650))
右下の指定が実際の画像よりオーバーした場合

左上の指定も、マイナスにすると黒い部分が出ます。

output_img = input_img.crop((-50, -50, 500, 500))
左上の指定がマイナスの場合
スポンサードリンク

複数の画像を切り抜き(トリミング)する方法

import PIL
from PIL import Image
import os

os.makedirs('C:/Utatane/output', exist_ok=True)

for filename in os.listdir('C:/Utatane'):
    if filename.endswith('.jpg') :
        input_img = Image.open(os.path.join('C:/Utatane', filename))
        output_img = input_img.crop((100, 100, 500, 500))
        output_img.save(os.path.join('C:/Utatane/output', filename))

前項で紹介した方法をfor文で繰り返し、複数の画像を切り抜きしています。

<コード5行目>
出力するフォルダを作成

<コード7行目~最後>
7行目:取り込みフォルダ内のファイルを取り込み
8行目:拡張子が「jpg」なら以下の操作を行う
9行目:取り込みフォルダのパスとファイル名を連結(フルパスに)して取り込み
10行目:切り抜き位置の指定
11行目:出力フォルダパスとファイル名を連結(フルパスに)して出力

これで取り込みフォルダ内のjpg画像が全て切り抜きできます。

スポンサードリンク

うまく動作しない場合の対処法

エラーが出る

No such file or directory: ○○

これは、読み込むファイルやフォルダが見つからないというエラーです。
読み込むファイルのファイル名と構文のファイル名が一致しているか確認しましょう。

詳しい解説は、下記記事をご参考ください。

○○ is not defined

今まで出てきていない変数などを処理しようとした時に出るエラーです。
変数名などが間違っていないかチェックしましょう。

詳しい解説は、下記記事をご参考ください。

その他のエラー

その他のエラーが出た場合は、エラー文をコピーしてNETで検索してみましょう。

スポンサードリンク

最後に

PythonのPillowで画像を切り抜きする方法を解説いたしました。

当ブログでは、Pythonに関する情報を配信しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。

挫折せずにPythonを独学で学習する方法は特におすすめです。

最後までお読みいただき、ありがとうございました。がんばってください!

タイトルとURLをコピーしました