Files
bid-doctor/docs/design/logo/scripts/build_logo.py
YANG JIANKUAN 05839dfe01 feat(logo): 应用图标改为印泥铺满,不留白边
- build_logo.py 新增 svg/app-icon.svg:印章实心部分撑满画布,毛边外的空隙用印章红补齐,白字和颗粒保留
- build_assets.sh 由 app-icon.svg 渲染 180 / 192 / 512 / 1024px 图标,方形、不带透明,圆角交给系统
- logo-spec.md 同步资产清单

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 10:10:59 +08:00

41 lines
1.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""生成正式字标和全部组合 SVG 到 svg/(决策 B4:H2 比例 + F2 中文 + E5 英文 + C2 视觉对齐)。
用法:.work/venv/bin/python scripts/build_logo.py
通常由 scripts/build_assets.sh 调用;运行前 svg/ 里要已有 seal*.svg。
"""
from logo_lib import FINAL, FINAL_INSET, LOGO, NAVY, SEAL_RED, WHITE, lockup_h2, lockup_vertical, seal_group, wordmark
SVG = LOGO / "svg"
def write(name, svg):
(SVG / name).write_text(svg)
def wordmark_svg(color, pad=2):
body, w, h = wordmark(FINAL, color, inset=FINAL_INSET)
return f'<svg xmlns="http://www.w3.org/2000/svg" viewBox="{-pad} {-pad} {w + 2 * pad:.2f} {h + 2 * pad:.2f}">{body}</svg>'
write("wordmark.svg", wordmark_svg(NAVY))
write("wordmark-reverse.svg", wordmark_svg(WHITE))
for kind, suffix in (("textured", "-textured"), ("clean", "")):
for color, dark, rev in ((NAVY, False, ""), (WHITE, True, "-reverse")):
body, w, h = wordmark(FINAL, color, inset=FINAL_INSET)
write(f"logo-horizontal{suffix}{rev}.svg", lockup_h2(body, w, h, on_dark=dark, kind=kind))
write(f"logo-vertical{suffix}{rev}.svg", lockup_vertical(body, w, h, on_dark=dark, kind=kind))
# 单色:干净版印章 + 字标同色
for color, name in (("#000000", "logo-mono-black.svg"), ("#FFFFFF", "logo-mono-white.svg")):
body, w, h = wordmark(FINAL, color, inset=FINAL_INSET)
write(name, lockup_h2(body, w, h, kind="clean", seal_color=color))
# 应用图标:印泥铺满,不留白边。印章实心部分撑满画布,毛边外的空隙用印章红补齐;
# 印章下面垫纸色底,白字和颗粒仍显示为白色
seal, _ = seal_group("textured", 0, 0, 100, on_dark=True)
write("app-icon.svg", f'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">'
f'<rect width="100" height="100" fill="{SEAL_RED}"/>{seal}</svg>')
print("ok", sorted(p.name for p in SVG.glob("logo-*.svg")) + ["wordmark.svg", "wordmark-reverse.svg", "app-icon.svg"])