优化(装修): 升级金刚区图标为320x320超清大字版,组件放大至120rpx并破除微信缓存
这个提交包含在:
@@ -291,65 +291,68 @@ build_menu_icons()
|
||||
|
||||
def build_partner_centers_menu_icons():
|
||||
import os
|
||||
font_menu = ImageFont.truetype(font_title, 42)
|
||||
font_sub = ImageFont.truetype(font_text, 22)
|
||||
font_sub_3 = ImageFont.truetype(font_text, 19)
|
||||
font_menu = ImageFont.truetype(font_title, 96)
|
||||
font_sub = ImageFont.truetype(font_text, 48)
|
||||
font_sub_3 = ImageFont.truetype(font_text, 42)
|
||||
|
||||
# 5个清新渐变配置: (文件名, t1, t2, c_top, c_bottom, is_3)
|
||||
items = [
|
||||
('menu_city_center.png', '市级', '运营', (72, 168, 252), (32, 122, 235), False),
|
||||
('menu_city_partner.png', '市级', '合伙', (252, 120, 100), (232, 68, 72), False),
|
||||
('menu_province_center.png', '省级', '服务', (62, 198, 146), (28, 162, 112), False),
|
||||
('menu_province_partner.png', '省级', '合伙', (168, 118, 230), (132, 78, 208), False),
|
||||
('menu_region_branch.png', '大区', '分公司', (248, 182, 72), (222, 138, 38), True),
|
||||
('menu_city_center.png', '市级', '运营', (68, 165, 255), (28, 118, 240), False),
|
||||
('menu_city_partner.png', '市级', '合伙', (255, 115, 96), (235, 60, 68), False),
|
||||
('menu_province_center.png', '省级', '服务', (58, 202, 148), (22, 160, 108), False),
|
||||
('menu_province_partner.png', '省级', '合伙', (172, 118, 238), (128, 72, 210), False),
|
||||
('menu_region_branch.png', '大区', '分公司', (252, 180, 68), (225, 132, 30), True),
|
||||
]
|
||||
|
||||
out_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), '../public/uploads/decorate'))
|
||||
os.makedirs(out_dir, exist_ok=True)
|
||||
|
||||
for fn, t1, t2, c1, c2, is_3 in items:
|
||||
size = 160
|
||||
size = 320
|
||||
base = Image.new('RGBA', (size, size), (0, 0, 0, 0))
|
||||
|
||||
# 渐变
|
||||
grad = Image.new('RGBA', (size, size))
|
||||
for y in range(size):
|
||||
r = y / size
|
||||
r = y / float(size)
|
||||
cr = int(c1[0] * (1 - r) + c2[0] * r)
|
||||
cg = int(c1[1] * (1 - r) + c2[1] * r)
|
||||
cb = int(c1[2] * (1 - r) + c2[2] * r)
|
||||
for x in range(size):
|
||||
grad.putpixel((x, y), (cr, cg, cb, 255))
|
||||
|
||||
pad = 12
|
||||
mask = Image.new('L', (size, size), 0)
|
||||
m_draw = ImageDraw.Draw(mask)
|
||||
m_draw.ellipse([6, 6, 154, 154], fill=255)
|
||||
m_draw.ellipse([pad, pad, size - pad, size - pad], fill=255)
|
||||
|
||||
base.paste(grad, (0, 0), mask)
|
||||
|
||||
d = ImageDraw.Draw(base)
|
||||
# 高级细双环与微高光
|
||||
d.ellipse([6, 6, 154, 154], outline=(255, 255, 255, 220), width=3)
|
||||
d.ellipse([14, 14, 146, 146], outline=(255, 255, 255, 110), width=1)
|
||||
d.ellipse([pad, pad, size - pad, size - pad], outline=(255, 255, 255, 230), width=6)
|
||||
d.ellipse([pad + 16, pad + 16, size - pad - 16, size - pad - 16], outline=(255, 255, 255, 110), width=2)
|
||||
|
||||
# 顶部轻微晨光弧线
|
||||
d.arc([16, 16, 144, 144], start=210, end=330, fill=(255, 255, 255, 140), width=2)
|
||||
d.arc([pad + 20, pad + 20, size - pad - 20, size - pad - 20], start=210, end=330, fill=(255, 255, 255, 150), width=4)
|
||||
|
||||
# 标题 1
|
||||
bbox1 = d.textbbox((0, 0), t1, font=font_menu)
|
||||
w1 = bbox1[2] - bbox1[0]
|
||||
d.text(((size - w1) / 2, 38), t1, font=font_menu, fill=(255, 255, 255, 255))
|
||||
d.text(((size - w1) / 2.0, 66), t1, font=font_menu, fill=(255, 255, 255, 255))
|
||||
|
||||
# 标题 2
|
||||
cur_sub_font = font_sub_3 if is_3 else font_sub
|
||||
bbox2 = d.textbbox((0, 0), t2, font=cur_sub_font)
|
||||
w2 = bbox2[2] - bbox2[0]
|
||||
y2 = 98 if is_3 else 96
|
||||
d.text(((size - w2) / 2, y2), t2, font=cur_sub_font, fill=(255, 255, 255, 240))
|
||||
y2 = 192 if is_3 else 188
|
||||
d.text(((size - w2) / 2.0, y2), t2, font=cur_sub_font, fill=(255, 255, 255, 245))
|
||||
|
||||
save_path = os.path.join(out_dir, fn)
|
||||
v2_path = os.path.join(out_dir, fn.replace('.png', '_v2.png'))
|
||||
base.save(save_path)
|
||||
print("Fresh icon generated at", save_path)
|
||||
base.save(v2_path)
|
||||
print("Fresh icon generated at", save_path, "and", v2_path)
|
||||
|
||||
build_partner_centers_menu_icons()
|
||||
|
||||
|
||||
在新工单中引用
屏蔽一个用户