行き先なし

ゲーミングGIFをPythonで作る

カラーを虹色に変化させるスクリプト

python画像処理

準備

pip install Pillow

スクリプト

import sys
from PIL import Image, ImageMath

# 色相移動幅
H_STEP = 8

# 1フレームの表示時間(ミリ秒)
DURATION = 30


def convert(input_path, output_path):
    src = Image.open(input_path).convert("RGBA")

    # アルファチャンネル取り出し
    src_alpha = src.split()[-1]

    # 色相, 彩度, 明度へ分解
    h, s, v = src.convert("HSV").split()

    images = []

    # NOTE: Pillowの扱うHSVの値範囲は0から255

    for i in range(0, 256, H_STEP):
        # 色相移動
        h_rot = ImageMath.eval(f"(h + {i}) % 256", h=h).convert("L")

        # RGB画像へ戻す
        rgb_result = Image.merge("HSV", (h_rot, s, v)).convert("RGB")

        # アルファチャンネルを復元する
        result = Image.merge("RGBA", rgb_result.split() + (src_alpha,)).convert("RGBA")

        # アニメーションリストへ追加
        images.append(result)

    images[0].save(
        output_path,
        save_all=True,  # アニメーション有効化
        append_images=images[1:],  # アニメーション
        optimize=False,
        duration=DURATION,
        loop=0,
    )


if __name__ == "__main__":
    if len(sys.argv) < 3:
        print("usage: python main.py ./input_image.png ./output_image.gif")
        sys.exit(0)

    input_path = sys.argv[1]
    output_path = sys.argv[2]

    convert(input_path, output_path)

この寿司が

寿司画像

こうなります

Party寿司画像