Pythonで画像をリサイズする方法

Pythonで画像をリサイズする方法をご紹介します。

条件

  • Python 3.7.0
  • Pillow 6.0.0

画像のサイズ変更

Pythonのイメージ処理ライブラリ「Pillow」を使用すると、簡単に画像サイズを変更することが出来ます。

インストール

以下のコマンドで、Pillowをインストールします。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
pip install pillow
pip install pillow
pip install pillow

ソースの構成

以下のように、操作対象の画像がimagesディレクトリ内に存在するものとします。

サンプルソース

以下、3通りのリサイズを行います。

  1. 縦横のサイズを指定
  2. アスペクト比固定で拡大
  3. アスペクト比固定で縮小
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# resize.py
from PIL import Image
def image_resize(width, image_name):
resize_image = img.resize((width, int(width * img.size[1] / img.size[0]))) # 画像のリサイズ
print("アスペクト比固定 width: {}, height: {}".format(resize_image.size[0], resize_image.size[1])) # 画像のサイズ出力
resize_image.save('images/' + image_name) # 画像の保存
img = Image.open("images/image1.JPG") # イメージを開く
print("元の画像サイズ width: {}, height: {}".format(img.size[0], img.size[1])) # 元の画像のサイズ出力
# 画像を指定したサイズに変更
img_resize = img.resize((300, 300)) # 画像のリサイズ
print("指定サイズ width: {}, height: {}".format(img_resize.size[0], img_resize.size[1])) # 画像のサイズ出力
img_resize.save('images/image_resize1.jpg') # 画像の保存
# アスペクト比を変えずに拡大
image_resize(800, 'image_resize2.jpg')
# アスペクト比を変えずに縮小
image_resize(200, 'image_resize3.jpg')
# resize.py from PIL import Image def image_resize(width, image_name): resize_image = img.resize((width, int(width * img.size[1] / img.size[0]))) # 画像のリサイズ print("アスペクト比固定 width: {}, height: {}".format(resize_image.size[0], resize_image.size[1])) # 画像のサイズ出力 resize_image.save('images/' + image_name) # 画像の保存 img = Image.open("images/image1.JPG") # イメージを開く print("元の画像サイズ width: {}, height: {}".format(img.size[0], img.size[1])) # 元の画像のサイズ出力 # 画像を指定したサイズに変更 img_resize = img.resize((300, 300)) # 画像のリサイズ print("指定サイズ width: {}, height: {}".format(img_resize.size[0], img_resize.size[1])) # 画像のサイズ出力 img_resize.save('images/image_resize1.jpg') # 画像の保存 # アスペクト比を変えずに拡大 image_resize(800, 'image_resize2.jpg') # アスペクト比を変えずに縮小 image_resize(200, 'image_resize3.jpg')
# resize.py

from PIL import Image


def image_resize(width, image_name):
    resize_image = img.resize((width, int(width * img.size[1] / img.size[0])))  # 画像のリサイズ
    print("アスペクト比固定 width: {}, height: {}".format(resize_image.size[0], resize_image.size[1]))  # 画像のサイズ出力
    resize_image.save('images/' + image_name)  # 画像の保存


img = Image.open("images/image1.JPG")  # イメージを開く
print("元の画像サイズ width: {}, height: {}".format(img.size[0], img.size[1]))  # 元の画像のサイズ出力

# 画像を指定したサイズに変更
img_resize = img.resize((300, 300))  # 画像のリサイズ
print("指定サイズ width: {}, height: {}".format(img_resize.size[0], img_resize.size[1]))  # 画像のサイズ出力
img_resize.save('images/image_resize1.jpg')  # 画像の保存

# アスペクト比を変えずに拡大
image_resize(800, 'image_resize2.jpg')

# アスペクト比を変えずに縮小
image_resize(200, 'image_resize3.jpg')

実行結果

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
元の画像サイズ width: 473, height: 315
指定サイズ width: 300, height: 300
アスペクト比固定 width: 800, height: 532
アスペクト比固定 width: 200, height: 133
元の画像サイズ width: 473, height: 315 指定サイズ width: 300, height: 300 アスペクト比固定 width: 800, height: 532 アスペクト比固定 width: 200, height: 133
元の画像サイズ width: 473, height: 315
指定サイズ width: 300, height: 300
アスペクト比固定 width: 800, height: 532
アスペクト比固定 width: 200, height: 133

imagesディレクトリ内に、リサイズした画像が出力されます。

それぞれの画像は以下の通りです。
(元の画像と、拡大された画像はクリックすると本来の画像サイズで表示されます。)

元の画像

指定サイズ

アスペクト比固定で拡大

アスペクト比固定で縮小

参考

Pillow

https://pillow.readthedocs.io/en/stable/

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です