PILを使用して画像のサイズを変更し、アスペクト比を維持する方法は?

PYTHON3 チュートリアル

画像のサイズ変更とアスペクト比維持の方法

画像処理ライブラリであるPIL(Pillow)を使用して、画像のサイズを変更する際にアスペクト比を維持する方法は、以下の手順に従います。

手順:

1. 元の画像の幅と高さを取得します。
2. 新しい幅または高さを指定します。
3. アスペクト比を維持しながら、新しい幅または高さを計算します。
4. 画像をリサイズします。

サンプルコード:

from PIL import Image

def resize_with_aspect_ratio(image_path, new_width=None, new_height=None):
    image = Image.open(image_path)
    width, height = image.size

    if new_width and not new_height:
        new_height = int((new_width / width) * height)
    elif new_height and not new_width:
        new_width = int((new_height / height) * width)

    resized_image = image.resize((new_width, new_height))
    resized_image.save("resized_image.jpg")

# 画像のパスと新しい幅を指定してリサイズ
resize_with_aspect_ratio("sample.jpg", new_width=300)

出力:

上記のコードを実行すると、元の画像(”sample.jpg”)を新しい幅(300ピクセル)にリサイズし、アスペクト比を維持した画像(”resized_image.jpg”)が保存されます。

別の方法として、指定した幅と高さの中でアスペクト比を維持しながら画像をリサイズする方法もあります。以下にもう一つのサンプルコードを示します。

def resize_with_aspect_ratio_max(image_path, max_width=None, max_height=None):
    image = Image.open(image_path)
    width, height = image.size

    if width > max_width or height > max_height:
        aspect_ratio = width / height
        if width > height:
            new_width = max_width
            new_height = int(max_width / aspect_ratio)
        else:
            new_height = max_height
            new_width = int(max_height * aspect_ratio)
    else:
        new_width = width
        new_height = height

    resized_image = image.resize((new_width, new_height))
    resized_image.save("resized_image_max.jpg")

# 画像のパスと最大幅・最大高さを指定してリサイズ
resize_with_aspect_ratio_max("sample.jpg", max_width=200, max_height=200)

出力:

上記のコードを実行すると、元の画像(”sample.jpg”)を最大幅200ピクセル、最大高さ200ピクセルに収まるようにリサイズし、アスペクト比を維持した画像(”resized_image_max.jpg”)が保存されます。

PIL(Python Imaging Library)を使用して画像のサイズを変更し、アスペクト比を維持する方法は、以下の手順に従います。

1. PILをインストールします。pipを使用して、以下のコマンドを実行します。
“`
pip install Pillow
“`

2. 以下のPythonコードを使用して、画像のサイズを変更し、アスペクト比を維持します。
“`python
from PIL import Image

def resize_with_aspect_ratio(image_path, output_path, new_width):
image = Image.open(image_path)
width_percent = (new_width / float(image.size[0]))
new_height = int((float(image.size[1]) * float(width_percent)))
resized_image = image.resize((new_width, new_height), Image.ANTIALIAS)
resized_image.save(output_path)

# 画像のパスと出力先パスを指定して、画像のサイズを変更します
resize_with_aspect_ratio(‘input_image.jpg’, ‘output_image.jpg’, 300)
“`
このコードでは、指定した新しい幅(new_width)に基づいて、元の画像のアスペクト比を維持しながら画像のサイズを変更します。

3. コードを実行して、指定した新しい幅に基づいて画像のサイズが変更され、アスペクト比が維持された新しい画像が出力先パスに保存されます。

以上が、PILを使用して画像のサイズを変更し、アスペクト比を維持する方法です。

購読
通知
0 Comments
Inline Feedbacks
View all comments