Information High

勉強に使ったり、仕事で詰まったIT技術の備忘録

Pythonで画像ファイルをリサイズする

はじめに

Pythonで画像ファイルのリサイズとファイル形式を変換して保管する方法の紹介です。
OpenCVを使う勉強の第1歩にしようと思っていたのですが、PIL(Python Image Library)が便利、ということで自分の備忘録として残しておくことにしました。
PILはPython2で終わってしまい、Python3ではPillowという名前で利用可能です。

ソースコード

画像を開いて、thumbnail()でリサイズするだけ。
縦横幅の最大値を指定しておけば、縦横比を維持したままで、どちらかの制限値にうまくかかるようにリサイズしてくれます。

# 画像処理モジュール "Pillow" で画像をリサイズする。
from PIL import Image

class resizePicture:

    # jpg形式ファイルの画像サイズを変更する
    def resizeImage(self, inputImage, outputImage, height, width):

        # 元画像読み込み
        imagePil = Image.open(inputImage)
        # リサイズ
        imagePil.thumbnail((width, height),resample=Image.BICUBIC)
        # 画像の保存
        imagePil.save(outputImage, quality=85)
    
    # pngファイルの画像サイズを変更し、jpg形式で保存する。
    def resizeImageWithConvert(self, inputImage, outputImage, height, width):

        # 元画像読み込み
        imagePil = Image.open(inputImage)
        # リサイズ
        imagePil.thumbnail((width, height),resample=Image.BICUBIC)
        # jpgに変換して保存
        convertPil = imagePil.convert('RGB')
        convertPil.save(outputImage, quality=85)

Pillowを使う前に

いつもどおりのパッケージのインストールが必要です。以下のコマンドでインストールしてください。

pip install Pillow

補足

リサイズ方法の指定

thumbnail()では ”resample=" でリサイズ方式が指定できます(省略可能)。
デフォルトはImage.NEARESTです。下に行くほど、高品質だけど、リサイズに時間がかかります。

  • Image.NEAREST : ニアレストネイバー法を使って圧縮する。
  • Image.BOX : (少し調べたけど、不明)
  • Image.BILINEAR : バイリニア法を使ってリサイズする。
  • Image.HAMMING : (少し調べたけど、不明)
  • Image.BICUBIC : バイキュービック法を使ってリサイズする。
  • Image.LANCZOS : ランツォシュ関数を使ってリサイズする。

保存時の画質

save()時に "quality=" でJPEGの品質を指定できます(省略可能)。
1~100で指定でき、デフォルトは75です。