Image2VideoProcessingPipelin / modules /utils /v_image_blurred_utils.py
HALU-HAL's picture
update files
6ed89af
raw
history blame
2.29 kB
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)