import os
import numpy as np
from PIL import Image
# 入力フォルダーと出力フォルダーのパス
input_folder = r"D:\WinPython\notebooks\input_folder"
output_folder = r"D:\WinPython\notebooks\output_folder"
# 出力フォルダーが存在しなければ作成
if not os.path.exists(output_folder):
os.makedirs(output_folder)
def shift_hue_preserve_alpha(image, degree):
"""
RGBA画像の透明部分を維持したまま色相をシフトする関数
"""
shift_value = int(degree * 255 / 360)
if image.mode == "RGBA":
r, g, b, a = image.split()
rgb_image = Image.merge("RGB", (r, g, b))
hsv_image = rgb_image.convert("HSV")
hsv_array = np.array(hsv_image, dtype=np.uint8)
hsv_array[..., 0] = (hsv_array[..., 0].astype(int) + shift_value) % 256
new_hsv_image = Image.fromarray(hsv_array, mode="HSV")
new_rgb_image = new_hsv_image.convert("RGB")
new_rgba_image = new_rgb_image.convert("RGBA")
new_rgba_image.putalpha(a)
return new_rgba_image
else:
hsv_image = image.convert("HSV")
hsv_array = np.array(hsv_image, dtype=np.uint8)
hsv_array[..., 0] = (hsv_array[..., 0].astype(int) + shift_value) % 256
new_hsv_image = Image.fromarray(hsv_array, mode="HSV")
new_rgb_image = new_hsv_image.convert("RGB")
return new_rgb_image
for file_name in os.listdir(input_folder):
if file_name.lower().endswith((".png", ".jpg", ".jpeg")):
image_path = os.path.join(input_folder, file_name)
original_image = Image.open(image_path)
if original_image.mode != "RGBA":
original_image = original_image.convert("RGBA")
for degree in range(0, 360, 15):
altered_image = shift_hue_preserve_alpha(original_image, degree)
base_name, _ = os.path.splitext(file_name)
# 三桁フォーマットで角度をファイル名に
output_file_name = f"{base_name}_{degree:03}.png"
output_path = os.path.join(output_folder, output_file_name)
altered_image.save(output_path, "PNG")
print("すべての処理が完了しました!")
ディスカッション
コメント一覧
まだ、コメントがありません