Python3 - PILで画像の読み込み&拡張子の識別&サイズを変更&保存する

2018-08-10 21:47:32 1029

はじめに

これをひととおり読めば、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')

関連記事