Pillow (PIL) - 画像をリサイズする方法について
概要
Pillow (PIL) で画像をリサイズする方法について紹介する。
resize
Image.resize で画像をリサイズできる。
Image.resize(size, resample=0)
- 引数
- size: リサイズ後の大きさ。(幅, 高さ) のタプルで指定する。
- resample: 補完方法
- PIL.Image.NEAREST: 最近傍補間 (デフォルト)
- PIL.Image.BILINEAR: バイリニア補間
- PIL.Image.BICUBIC: バイキュービック補間
- PIL.Image.LANCZOS: Lanczos 補間
- 返り値
- dst: リサイズした画像
指定した大きさにリサイズする。
from PIL import Image # 画像を読み込む。 img = Image.open("sample.jpg") # 指定した大きさにリサイズする。 dst = img.resize((100, 300)) print(f"{img.size} -> {dst.size}") # (400, 400) -> (100, 300)
指定した倍率でリサイズする。
from PIL import Image # 画像を読み込む。 img = Image.open("sample.jpg") # 指定した倍率でリサイズする。 fx, fy = 0.702, 0.702 size = (round(img.width * fx), round(img.height * fx)) dst = img.resize(size) print(f"{img.size} -> {dst.size}") # (400, 400) -> (281, 281)
アスペクト比を固定して、幅が指定した値になるようリサイズする。
from PIL import Image # 画像を読み込む。 img = Image.open("sample.jpg") # アスペクト比を固定して、幅が指定した値になるようリサイズする。 def scale_to_width(img, width): height = round(img.height * width / img.width) return img.resize((width, height)) dst = scale_to_width(img, 250) print(f"{img.size} -> {dst.size}") # (400, 400) -> (250, 250)
アスペクト比を固定して、高さが指定した値になるようリサイズする。
from PIL import Image # 画像を読み込む。 img = Image.open("sample.jpg") # アスペクト比を固定して、高さが指定した値になるようリサイズする。 def scale_to_height(img, height): width = round(img.width * height / img.height) return img.resize((width, height)) dst = scale_to_height(img, 250) print(f"{img.size} -> {dst.size}") # (400, 400) -> (250, 250)
thumbnail
Image.thumbnail で画像を指定した大きさに収まるようリサイズできる。
この関数は元の画像を直接リサイズするので注意する。
Image.thumbnail(size, resample=3)
- 引数
- size: この大きさに収まるようにリサイズする。(幅, 高さ) のタプルで指定する。
- resample: 補完方法
- PIL.Image.NEAREST: 最近傍補間 (デフォルト)
- PIL.Image.BILINEAR: バイリニア補間
- PIL.Image.BICUBIC: バイキュービック補間
- PIL.Image.LANCZOS: Lanczos 補間
from PIL import Image # 画像を読み込む。 img = Image.open("sample.jpg") print(img.size) # (400, 400) # アスペクト比を固定して、指定した大きさに収まるようリサイズする。 img.thumbnail((200, 100)) print(img.size) # (100, 100)