# 生成 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()