Files
drawlogo/_design-test/build-logos.py
T

57 lines
2.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.
# 生成甄房 logo 位图替换资源
# 关键:旧 logo 的墨迹占画布约 90%,而甄房 mark 只占 69% —— 直接替换会让 logo 视觉缩小 25%。
# 本脚本把 mark 的墨迹等比缩放到占画布 90%,保持与原资源等大,替换后不改变版式。
# 用法: python _design-test/build-logos.py (预演)
# python _design-test/build-logos.py --write (真写)
import os, sys, shutil
from PIL import Image
SRC = r'D:\SGP_KF\DrawLogo\_design-test\logo\png'
ZF = r'e:\KF_7\ZhenOS-ZF'
WRITE = '--write' in sys.argv
INK_RATIO = 0.90 # 墨迹占画布比例,与原资源对齐
def fitted(src_name, canvas, ratio=INK_RATIO):
"""把 src 的墨迹等比缩放到占 canvas 的 ratio,居中放到透明画布上"""
im = Image.open(os.path.join(SRC, src_name)).convert('RGBA')
bb = im.getchannel('A').getbbox()
ink = im.crop(bb)
k = (canvas * ratio) / max(ink.width, ink.height)
ink = ink.resize((max(1, round(ink.width * k)), max(1, round(ink.height * k))), Image.LANCZOS)
out = Image.new('RGBA', (canvas, canvas), (0, 0, 0, 0))
out.paste(ink, ((canvas - ink.width) // 2, (canvas - ink.height) // 2), ink)
return out
JOBS = [
# 目标路径, 生成方式, 说明
(f'{ZF}/ruoyi-ui/src/assets/logo/logo.png', ('fitted', 'mark-p80-ink.png', 1000), 'WEB 登录页/工具页 · 墨蓝标'),
(f'{ZF}/ruoyi-ui/src/assets/logo/logo-sidebar.png', ('fitted', 'mark-p80-white.png', 1000), 'WEB 侧栏(墨蓝底)· 白标'),
(f'{ZF}/zhenfang-uni/src/static/logo.png', ('fitted', 'mark-p80-ink.png', 1000), 'H5 登录页(白卡内)· 墨蓝标'),
(f'{ZF}/ruoyi-ui/public/favicon.png', ('plain', 'appicon-512.png', None), 'WEB favicon · 应用图标'),
(f'{ZF}/xiaohuju/build/icons/icon.png', ('plain', 'appicon-512.png', None), 'Electron 托盘/窗口图标'),
]
ICO_OUT = f'{ZF}/xiaohuju/build/icons/icon.ico'
for dest, spec, label in JOBS:
before = os.path.getsize(dest) if os.path.exists(dest) else 0
kind = spec[0]
img = fitted(spec[1], spec[2]) if kind == 'fitted' else Image.open(os.path.join(SRC, spec[1])).convert('RGBA')
print(' %-58s %sx%s (%dB -> ~)' % (label, img.width, img.height, before))
if WRITE:
img.save(dest)
# 多尺寸 ICO(含 256,Windows 图标规范)
ico_sizes = [16, 24, 32, 48, 64, 128, 256]
base = Image.open(os.path.join(SRC, 'appicon-1024.png')).convert('RGBA')
imgs = [base.resize((s, s), Image.LANCZOS) for s in ico_sizes]
print(' %-58s %s' % ('Electron 应用图标 ICO', '/'.join(str(s) for s in ico_sizes)))
if WRITE:
imgs[-1].save(ICO_OUT, format='ICO', sizes=[(s, s) for s in ico_sizes])
print('\n' + ('已写入' if WRITE else '预演,未写入(加 --write 生效)'))
print('注:xiaohuju/build/icons/icon.icns(macOS)需在 macOS 上用 iconutil 生成,本机跳过;')
print(' xiaohuju/resources/app.png 是启动背景稿(含蓝色主体图形),需设计重做,本脚本不动。')