# -*- coding: utf-8 -*- # 2026-10-02 PD 지시 — "피드백 해준 기준에 맞는지 검토해서 배경을 투명하게 … 리소스화". 생성한 아이콘 폴더를 채점해 검토용 시트로 묶는다. # python icon_review_sheet.py <폴더> [한 시트의 줄 수=10] # 파일 이름 규칙: _<대상>_s<강도>_<순번>.png. 채점은 comfy_moba_batch.score(불투명 비율 · 가장자리 닿음 · 한 덩어리). import glob, os, sys from PIL import Image, ImageDraw from comfy_moba_batch import score def main(): folder, tag = sys.argv[1], sys.argv[2] rows_per = int(sys.argv[3]) if len(sys.argv) > 3 else 10 groups, order = {}, [] for path in sorted(glob.glob(os.path.join(folder, tag + "_*_s*_*.png")), key=os.path.getmtime): name = os.path.basename(path)[len(tag) + 1:].rsplit("_s", 1)[0] if name not in groups: groups[name] = []; order.append(name) groups[name].append(path) cell, pad, left = 240, 4, 90 cols = max(len(v) for v in groups.values()) for page in range(0, len(order), rows_per): names = order[page:page + rows_per] sheet = Image.new("RGB", (left + cols * (cell + pad) + pad, len(names) * (cell + pad) + pad), (24, 24, 28)) draw = ImageDraw.Draw(sheet) for i, name in enumerate(names): y = pad + i * (cell + pad) draw.text((pad, y + 4), name, fill=(240, 220, 160)) for k, path in enumerate(sorted(groups[name])): im = Image.open(path).convert("RGBA") ok, opaque, edge, mainc = score(im) # 투명 배경 확인용으로 중간 회색 바탕에 올린다 bg = Image.new("RGB", (cell, cell), (52, 52, 58)); small = im.resize((cell, cell), Image.LANCZOS); bg.paste(small, (0, 0), small) x = left + k * (cell + pad) sheet.paste(bg, (x, y)) draw.text((x + 3, y + 2), "#%d %s op%.2f ed%.2f mn%.2f" % (k, "OK" if ok else "X", opaque, edge, mainc), fill=(120, 255, 120) if ok else (255, 120, 120)) out = os.path.join(folder, "%s_review_%d.png" % (tag, page // rows_per)) sheet.save(out); print(out) if __name__ == "__main__": main()