画像をリサイズした後余白を追加するPythonプログラム

2024年4月26日

縦横の拡大縮小比率を同じにして大きさを変えた後 透明な余白を追加するプログラムです

コード

from PIL import Image, ImageOps
import numpy as np
import os

def resize_image(image, new_width, new_height):
    width_ratio = new_width / image.width
    height_ratio = new_height / image.height
    ratio = min(width_ratio, height_ratio)
    new_size = (int(image.width * ratio), int(image.height * ratio))
    resized_image = image.resize(new_size, Image.ANTIALIAS)
    new_image = Image.new("RGBA", (new_width, new_height), (0, 0, 0, 0))
    x = (new_width - new_size[0]) // 2
    y = (new_height - new_size[1]) // 2
    new_image.paste(resized_image, (x, y))
    return new_image

def add_padding(image,  target_aspect_ratio):
    original_width, original_height = image.size
    if original_width / original_height > target_aspect_ratio:
        new_height = original_width / target_aspect_ratio
        new_width = original_width
    else:
        new_width = original_height * target_aspect_ratio
        new_height = original_height
    new_image = Image.new("RGBA", (int(new_width), int(new_height)), (0, 0, 0, 0))
    x_offset = (int(new_width) - original_width) // 2
    y_offset = (int(new_height) - original_height) // 2
    new_image.paste(image, (x_offset, y_offset))
    return new_image
def batch_process_images(input_folder, output_folder,width,height):
    # 出力フォルダが存在しない場合は作成
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)

    # 入力フォルダ内の画像ファイルを一括で処理
    for filename in os.listdir(input_folder):
        if filename.endswith(('.jpg', '.jpeg', '.png', '.bmp', '.gif')):
            input_path = os.path.join(input_folder, filename)
            output_path = os.path.join(output_folder, filename)
            image = Image.open(input_path)
            image = resize_image(image,width,height)
            output_image = add_padding(image,width/height)
            output_image.save(output_path)

# 使用例:
input_folder = 'input_folder'
output_folder = 'output_folder'
output_f = 'output_folder'
output_folder = os.path.join(input_folder, output_f)
width = 512
height = 512
batch_process_images(input_folder, output_folder, width,height)

Python,画像

Posted by eightban