Spaces:
Runtime error
Runtime error
from PIL import Image, ImageFilter | |
import random | |
import os | |
from pathlib import Path | |
import cv2 | |
import numpy as np | |
def embed_image_on_blurred_background(input_path: str, output_path: str, height: int = 2000) -> None: | |
""" | |
入力画像をブラーしたバージョンの上に配置し、その結果を保存します。 | |
引数: | |
- input_path: 入力画像のパス | |
- output_path: 処理された画像を保存する場所 | |
- height: 出力画像の希望の高さ(デフォルトは2000ピクセル) | |
""" | |
# 与えられたパスから画像を読み込む | |
image = Image.open(input_path) | |
# 画像の元のサイズを取得する | |
original_width, original_height = image.size | |
# 9:16のアスペクト比と指定された高さに基づいて、出力画像の幅を計算する | |
target_width = int(height * 9 / 16) | |
# 元の画像のブラーしたバージョンを作成する | |
blurred_image = image.filter(ImageFilter.GaussianBlur(20)) | |
# ブラー画像を希望の出力サイズにリサイズする | |
resized_blurred_background = blurred_image.resize((target_width, height)) | |
# 元のアスペクト比を保持したまま、元の画像を指定された高さにリサイズする | |
new_width = int(original_width * (height / original_height)) | |
resized_image_keep_aspect = image.resize((new_width, height), Image.ANTIALIAS) | |
# リサイズされた元の画像をブラーした背景の中央に配置する位置を計算する | |
x_offset = (resized_blurred_background.width - resized_image_keep_aspect.width) // 2 | |
y_offset = (resized_blurred_background.height - resized_image_keep_aspect.height) // 2 | |
# 画像に透明度がある場合(RGBAモード)、背景にペーストする際のマスクとして使用する | |
mask_keep_aspect = resized_image_keep_aspect if resized_image_keep_aspect.mode == "RGBA" else None | |
# リサイズされた元の画像をブラーした背景の上にオーバーレイする | |
resized_blurred_background.paste(resized_image_keep_aspect, (x_offset, y_offset), mask_keep_aspect) | |
# 指定されたパスに結合された画像を保存する | |
resized_blurred_background.save(output_path) |