ゲーミング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)
この寿司が
こうなります