JPG画像ファイルのサムネイルをPythonで生成
JPG画像のサムネイルを作成する処理をPythonで書きました。
Pillowというライブラリで画像ファイルを扱えます。もともとはPILというライブラリがあったのですが、PILはPython 2までしかサポートしておらず、PILからフォークしたPillowがいまのデファクトという経緯のようです。
Pillow — Pillow (PIL Fork) 8.1.0 documentation
ライブラリをインストール。
$ pip install pillow
サンプルコードです。
import io # Pillowをインポート import PIL.Image # 元画像のJPEGバイナリのバイト配列 originalBinary = ... # JPEGのバイト配列から画像のインスタンスを生成 image = PIL.Image.open(io.BytesIO(originalBinary)) # サムネイルの最大サイズ width = 200 height = 200 # 長いほうの辺が指定のサイズになる # 縦横比は維持されるため、元画像が正方形でない限り短い辺はこれよりも小さくなる # 2021/01/22追記 # 以下のコードを実行すれば、上記サイズは最大ではなく最小サイズの指定に変わる # つまり、短いほうの辺が指定のサイズになるように書き換える #widthOrig, heightOrig = image.size #if widthOrig * height > heightOrig * width: # # 幅は指定よりも大きい状態にする # width = widthOrig * height / heightOrig #elif widthOrig * height < heightOrig * width: # # 高さ指定よりも大きい状態にする # height = heightOrig * width / widthOrig # サムネイル作成 # image自身が変更される image.thumbnail((width, height), PIL.Image.LANCZOS) # JPEGバイナリのバイト配列を生成 output = io.BytesIO() image.save(output, format = "JPEG") thumbnailBinary = output.getvalue()
2021/01/22追記
上記ソースコードのコメントアウトしてあるところを有効化すると、短い辺が200になるように縦横比を維持したままリサイズします。
縦横比を変えて強制的に指定のサイズにリサイズするにはthumbnail
メソッドのかわりにresize
メソッドを使います。