- 无障碍服务监听7MA出行小程序,匹配关键词自动开始/结束计时 - 事件驱动截图+ML Kit离线中文OCR兜底,解决WebView无障碍树不稳定 - 常驻计时通知(15/18/30分钟提醒)与结束用车按钮 - 浅色主题主界面:权限状态、具体实现、安全/免责/法律声明 - 电池白名单+自启动引导+onUnbind自动重绑守护 - 无网络权限,完全离线运行
80 lines
2.5 KiB
Python
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()
|