# -*- coding: utf-8 -*- """泓衍票据 · 应用图标方案生成器 —— 1024×1024 标准 SVG 每个方案输出:iOS 整图 / Android 自适应前景 / Android 自适应背景 / Android 单色 """ import pathlib OUT = pathlib.Path("/Users/guoguo/Desktop/HeHuiDeepBlue/设计/深空蓝/图标/svg") OUT.mkdir(parents=True, exist_ok=True) THEMES = { "deep": dict( # 深空蓝(主方案) bg=[("0","#3170FF"),(".48","#1B4FD8"),("1","#0A2A82")], glow="#A8C6FF", glowop=".42", ink=[("0","#FFFFFF"),("1","#D9E7FF")], sub="#8FB2FF", gold=[("0","#F8C263"),("1","#E08A17")], ), "frost": dict( # 霜白(浅色方案) bg=[("0","#FFFFFF"),(".52","#EDF3FF"),("1","#D6E3F9")], glow="#FFFFFF", glowop=".85", ink=[("0","#2A62EA"),("1","#0E3AAE")], sub="#FFFFFF", gold=[("0","#DCA02C"),("1","#A8680A")], ), "mono": dict( # Android 13+ 单色主题图标 bg=[("0","#00000000"),("1","#00000000")], glow="#000000", glowop="0", ink=[("0","#FFFFFF"),("1","#FFFFFF")], sub="#000000", gold=[("0","#FFFFFF"),("1","#FFFFFF")], mono=True, ), } SAFE = 0.72 # Android 自适应安全区缩放 def stops(l): return "".join(f'' for o,c in l) # ── 图形本体:返回 (满版元素, 主体标记) ────────────────────── def mark_A(p): # A 三叠水 · 泓纹(水波三叠,末叠鎏金) def wave(x0, L, y, a=32): return (f"M {x0} {y} C {x0+L*0.16:.0f} {y-a} {x0+L*0.34:.0f} {y-a} {x0+L*0.5:.0f} {y} " f"S {x0+L*0.84:.0f} {y+a} {x0+L} {y}") return "", f''' ''' def mark_B(p): # B 券印 · 票据 + 骑缝章 return "", f''' ''' def mark_C(p): # C 泓池 · 深水环 + 金色水面 return "", f''' ''' def mark_D(p): # D 泓衡 · H 字标(斜梁) return "", f''' ''' def mark_E(p): # E 玺信 · 印章 + 泓 return "", f''' 泓 ''' def mark_F(p): # F 票角 · 整枚图标即一张票据,右下折角 bleed = '' return bleed, f''' ''' MARKS = {"a":mark_A,"b":mark_B,"c":mark_C,"d":mark_D,"e":mark_E,"f":mark_F} NAMES = {"a":"sanshui","b":"quanyin","c":"hongchi","d":"hengbiao","e":"xixin","f":"piaojiao"} def build(key, theme, layer): """layer: full | fg | bg | mono""" p = THEMES["mono" if layer=="mono" else theme] bleed, mark = MARKS[key](p) d = f'''{stops(p["bg"])} {stops(p["ink"])} {stops(p["gold"])}''' plate = '' if layer == "full": inner = plate + bleed + mark elif layer == "bg": inner = plate + bleed elif layer == "fg": inner = f'{mark}' else: # mono:ink/gold→白、sub→黑,整组作为 mask 打到黑色实底上 inner = (f'' f'{mark}' f'') return (f'' f'{d}{inner}') n = 0 for k in MARKS: for t in ("deep","frost"): for layer, tag in (("full",""),("fg","-android-fg"),("bg","-android-bg")): (OUT/f"icon-{k}-{NAMES[k]}-{t}{tag}.svg").write_text(build(k,t,layer), encoding="utf-8") n += 1 (OUT/f"icon-{k}-{NAMES[k]}-android-mono.svg").write_text(build(k,"deep","mono"), encoding="utf-8") n += 1 print(f"生成 {n} 个 SVG → {OUT}")