【Python】画像の幅を高さに合わせて縦横比を1対1にトリムする

指定したフォルダの中にある画像を一括してトリムし、縦横比を1対1にする方法の解説です。
言語はPythonを使います。

事前準備

今回のコードでは、次の2つのモジュールを使います。

  • PIL
  • pathlib

PILがまだインストールされていない場合は、以下のコマンドを実行してインストールしてください。

pip install pillow

pathlibに関しては、Pythonのバージョンが3.4以降であれば標準ライブラリに入っているため、特に何もしなくても大丈夫です。

コード

コードは以下になります。

from PIL import Image
from pathlib import Path

if __name__ == "__main__":
    image_paths = [i for i in Path('トリムしたい画像が入ったフォルダのパス').glob('*.*') if i.suffix.lower() in [r".png", r".jpg"]]

    for image_path in image_paths:
        image = Image.open(image_path)
        new_image = image.crop((0,0,image.height,image.height))
        new_image.save('トリムした画像を保存するパス', quality = 100)
        
    print('完了しました')

コードの解説

4行目

ここから処理が開始します。

5行目

Path()の引数に指定したフォルダの中にある全ての画像のパスを取得します。
取得する画像の拡張子は以下の2つとしています。

  • .png
  • .jpg

7行目

全ての画像のパスが取得できたら、次はトリムしていきましょう。
トリムは7~9行目で行います。
まず、for を使って取得した画像のパスを1つずつ処理するようにします。

8行目

画像のパスから実際の画像を取得します。

9行目

画像の幅が高さと等しくなるようにトリムします。

10行目

最後にトリムした画像を保存すれば完了です。

保存する画像の画質は10行目のqualityで決めています。
qualityは100が最大で、今回は一番良い画質で保存しています。
qualityを上げれば画質は上がりますが、ファイルサイズが大きくなってしまうため画像の用途によって調整するとよいです。

最後に & 関連書籍

以上になります。

分かりにくいところや、「もっとこうしてほしい」などのご意見がありましたら、ツイッターから連絡いただけると幸いです。
質問に関しても、お気軽にお問い合わせください。

余談ですが、Pythonを使ってインスタグラムを自動でいいねするコードなども公開しています。
興味があれば見てみてください。

以下は関連書籍です。

コメント

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