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