Files
kirl 2cf3cbad56 feat: 4ma 用车计时助手 v1.0
- 无障碍服务监听7MA出行小程序,匹配关键词自动开始/结束计时
- 事件驱动截图+ML Kit离线中文OCR兜底,解决WebView无障碍树不稳定
- 常驻计时通知(15/18/30分钟提醒)与结束用车按钮
- 浅色主题主界面:权限状态、具体实现、安全/免责/法律声明
- 电池白名单+自启动引导+onUnbind自动重绑守护
- 无网络权限,完全离线运行
2026-09-01 16:19:16 +08:00

80 lines
2.5 KiB
Python

# 生成 4ma 应用图标(PNG,各密度 mipmap)
# 设计:浅色圆角底板 + 绿色圆角方块 + 白色加粗 "4ma"
import os
from PIL import Image, ImageDraw, ImageFont
BASE = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
RES = os.path.join(BASE, "app", "src", "main", "res")
SIZES = {
"mipmap-mdpi": 48,
"mipmap-hdpi": 72,
"mipmap-xhdpi": 96,
"mipmap-xxhdpi": 144,
"mipmap-xxxhdpi": 192,
}
MASTER = 1024
BG = (242, 247, 251, 255) # 浅色底板
TILE = (16, 185, 129, 255) # 品牌绿 #10B981
TILE_DARK = (5, 150, 105, 255) # 深绿 #059669
WHITE = (255, 255, 255, 255)
def load_font(size):
for name in ("segoeuib.ttf", "arialbd.ttf", "DejaVuSans-Bold.ttf"):
for root in (os.environ.get("WINDIR", "C:/Windows") + "/Fonts", "/usr/share/fonts/truetype"):
p = os.path.join(root, name)
if os.path.exists(p):
try:
return ImageFont.truetype(p, size)
except Exception:
continue
return ImageFont.load_default()
def make_master():
img = Image.new("RGBA", (MASTER, MASTER), (0, 0, 0, 0))
d = ImageDraw.Draw(img)
# 底板:整幅浅色(launcher 会自行裁形)
d.rectangle([0, 0, MASTER, MASTER], fill=BG)
# 绿色圆角方块(留 16% 边距)
m = int(MASTER * 0.16)
d.rounded_rectangle([m, m, MASTER - m, MASTER - m],
radius=int(MASTER * 0.19), fill=TILE)
# 底部 1/4 叠加深绿,做出轻微渐变感
overlay = Image.new("RGBA", (MASTER, MASTER), (0, 0, 0, 0))
od = ImageDraw.Draw(overlay)
od.rounded_rectangle([m, MASTER - int(MASTER * 0.30), MASTER - m, MASTER - m],
radius=int(MASTER * 0.19), fill=TILE_DARK)
img = Image.alpha_composite(img, overlay)
d = ImageDraw.Draw(img)
# 白色加粗 "4ma"
font = load_font(int(MASTER * 0.40))
text = "4ma"
bb = d.textbbox((0, 0), text, font=font)
w = bb[2] - bb[0]
h = bb[3] - bb[1]
x = (MASTER - w) / 2 - bb[0]
y = (MASTER - h) / 2 - bb[1]
d.text((x, y), text, font=font, fill=WHITE)
return img
def main():
master = make_master()
for folder, size in SIZES.items():
out_dir = os.path.join(RES, folder)
os.makedirs(out_dir, exist_ok=True)
out = os.path.join(out_dir, "ic_launcher.png")
master.resize((size, size), Image.LANCZOS).save(out)
print("written:", out)
if __name__ == "__main__":
main()