はじめに
これをひととおり読めば、python3で画像を読み込み、拡張子を維持・変更したり、サイズを変更したり、保存することができるようになります。また、おまけでURLからの画像の保存も紹介しています。
PILのインストール
まずはPILというライブラリをインストールします。pillow
pip install pillow
注意しなければいけないのは、pipでインストールする時は、pillowです。コード
usage_pil.py
from PIL import Image #ライブラリをインポート
import imghdr
img_src = '/sample.jpg'
image_type = imghdr.what(img_src) #拡張子を判別 jpgの場合は、jpegとなる
pil_img = Image.open(img_src) #画像を読み込みます
size = pil_img.size #サイズをゲット [width,height]のリスト型で返ってくる
width = size[0]
height = size[1]
max_width = 1000 #今回サイズ変更したい横幅
if width > max_width:
re_height = int(height*(max_width/width))
pil_img.thumbnail((max_width, re_height), Image.LANCZOS)
#画像データの保存
filename = 'sample2.%s' % image_type
pil_img.save(path, image_type)
解説
pil_img = Image.open(img_src)でファイルを読み込みます。また、imghdrライブラリでは、whatで同様に読み込めばその拡張子が返ってきます。
jpgはjpegで返ってくるので注意。
Image.LanLANCZOSは、画像のリサンプリングする際に使われるフィルターで、以下の種類が存在する。下に行くほど、クオリティを維持したりサンプリングが行われるらしい。(感覚としてはどれも同じ)
- NEAREST
- BOX
- BILINEAR
- HAMMING
- BICUBIC
- LANCZOS
以下、URLから画像を取り込む場合の処理です。おまけ。
url画像を読み込み、保存する
from PIL import Image
from io import BytesIO
url = "http://hogehoge.com/sample.jpg"
image_data = BytesIO(requests.get(url).content) #実質ファイルと同じ状態
pil_img = Image.open(image_data)
pil_img.save('sample.jpg', 'JPEG')
Python, Pillowで画像を一括リサイズ(拡大・縮小) | note.nkmk.me
画像処理ライブラリPillow(PIL)のImageモジュールに、画像をリサイズ(拡大・縮小)するメ