Initial Dansori character workspace

This commit is contained in:
eKeerar
2026-07-04 10:34:46 +09:00
commit 5a419816ff
2480 changed files with 38692 additions and 0 deletions
@@ -0,0 +1,47 @@
from pathlib import Path
from PIL import Image, ImageDraw, ImageFont
ROOT = Path(__file__).resolve().parents[1]
SRC = ROOT / "03_Assets" / "Parts" / "Images"
OUT = ROOT / "03_Assets" / "Live2D" / "_parts_contact_sheet.png"
def main() -> None:
files = sorted(p for p in SRC.glob("*.png") if p.name != "isabel_part_master_apose.png")
thumb_w, thumb_h = 220, 380
label_h = 34
cols = 4
rows = (len(files) + cols - 1) // cols
sheet = Image.new("RGBA", (cols * thumb_w, rows * (thumb_h + label_h)), (32, 32, 32, 255))
draw = ImageDraw.Draw(sheet)
font = ImageFont.load_default()
for i, path in enumerate(files):
img = Image.open(path).convert("RGBA")
img.thumbnail((thumb_w - 16, thumb_h - 16), Image.Resampling.LANCZOS)
col = i % cols
row = i // cols
x = col * thumb_w + (thumb_w - img.width) // 2
y = row * (thumb_h + label_h) + 8
checker = Image.new("RGBA", (thumb_w, thumb_h), (255, 255, 255, 255))
cd = ImageDraw.Draw(checker)
for yy in range(0, thumb_h, 20):
for xx in range(0, thumb_w, 20):
if (xx // 20 + yy // 20) % 2:
cd.rectangle((xx, yy, xx + 19, yy + 19), fill=(218, 218, 218, 255))
sheet.alpha_composite(checker, (col * thumb_w, row * (thumb_h + label_h)))
sheet.alpha_composite(img, (x, y))
draw.text((col * thumb_w + 8, row * (thumb_h + label_h) + thumb_h + 8), path.stem, fill=(255, 255, 255, 255), font=font)
OUT.parent.mkdir(parents=True, exist_ok=True)
sheet.convert("RGB").save(OUT)
print(OUT)
if __name__ == "__main__":
main()