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です。