32 lines
1.5 KiB
Python
32 lines
1.5 KiB
Python
|
|
"""IB 속도 꼬리 그림(Tail_Basic02 · 파랑이 그림에 들어 있음) → 진영색 그림 4장(PD 2026-11-10 「진영 색을 입히고」).
|
||
|
|
원본 Assets/VFX/IB/FGResources/Effect/Image/Tail_Basic02.png 는 그대로 두고 Assets/VFX/IB/_TKS/Tail_Basic02_<진영>.png 로 새로 만든다.
|
||
|
|
방법 = 채도 있는 픽셀만 색상(H)을 진영색으로 · 채도·밝기 유지(흰 심 그대로). 진영색 원본 = Tools/dash2d_camps.csv.
|
||
|
|
실행: python -I -X utf8 Tools/make_ib_camp_textures.py
|
||
|
|
"""
|
||
|
|
import colorsys
|
||
|
|
import csv
|
||
|
|
import os
|
||
|
|
|
||
|
|
from PIL import Image
|
||
|
|
|
||
|
|
HERE = os.path.dirname(os.path.abspath(__file__))
|
||
|
|
ROOT = os.path.dirname(HERE)
|
||
|
|
SRC = os.path.join(ROOT, "Assets", "VFX", "IB", "FGResources", "Effect", "Image", "Tail_Basic02.png")
|
||
|
|
OUT = os.path.join(ROOT, "Assets", "VFX", "IB", "_TKS")
|
||
|
|
os.makedirs(OUT, exist_ok=True)
|
||
|
|
camps = list(csv.DictReader(open(os.path.join(HERE, "dash2d_camps.csv"), encoding="utf-8-sig")))
|
||
|
|
im = Image.open(SRC).convert("RGBA")
|
||
|
|
alpha = im.getchannel("A")
|
||
|
|
h, s, v = im.convert("RGB").convert("HSV").split()
|
||
|
|
for cp in camps:
|
||
|
|
hx = cp["s_hex"].lstrip("#")
|
||
|
|
r, g, b = (int(hx[i:i + 2], 16) / 255.0 for i in (0, 2, 4))
|
||
|
|
ch = colorsys.rgb_to_hsv(r, g, b)[0]
|
||
|
|
nh = h.point(lambda x: int(round(ch * 255)) % 256)
|
||
|
|
hsv = Image.merge("HSV", (nh, s, v))
|
||
|
|
# 채도 낮은 픽셀(흰 심)은 색상과 무관하게 거의 흰색으로 남는다
|
||
|
|
rgb = hsv.convert("RGB")
|
||
|
|
out = Image.merge("RGBA", (*rgb.split(), alpha))
|
||
|
|
out.save(os.path.join(OUT, "Tail_Basic02_%s.png" % cp["s_camp"]))
|
||
|
|
print("ok", sorted(os.listdir(OUT)))
|