# -*- 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'')
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}")