generate-tabbar-icons.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. from PIL import Image, ImageDraw
  2. ICON_SIZE = 81
  3. OUTPUT_DIR = "D:/work/绿水青山/清道夫App/src/static/tabbar"
  4. # 颜色
  5. NORMAL_BG = "#f3f4f6"
  6. NORMAL_FG = "#9ca3af"
  7. ACTIVE_BG = "#eff6ff"
  8. ACTIVE_FG = "#3b82f6"
  9. def draw_rounded_rect(draw, xy, radius, fill):
  10. x1, y1, x2, y2 = xy
  11. draw.rounded_rectangle(xy, radius=radius, fill=fill)
  12. def draw_home(img, color):
  13. draw = ImageDraw.Draw(img)
  14. # 房子主体
  15. draw.polygon([(40, 20), (20, 40), (60, 40)], fill=color)
  16. draw.rectangle([25, 40, 55, 62], fill=color)
  17. # 门
  18. draw.rectangle([35, 50, 45, 62], fill="white")
  19. def draw_task(img, color):
  20. draw = ImageDraw.Draw(img)
  21. # 旗帜
  22. draw.rectangle([38, 18, 42, 58], fill=color)
  23. draw.polygon([(42, 18), (58, 26), (42, 34)], fill=color)
  24. # 底座
  25. draw.ellipse([32, 58, 48, 62], fill=color)
  26. def draw_my(img, color):
  27. draw = ImageDraw.Draw(img)
  28. # 头
  29. draw.ellipse([30, 18, 50, 38], fill=color)
  30. # 身体
  31. draw.rounded_rectangle([24, 40, 56, 66], radius=8, fill=color)
  32. def create_icon(name, active=False):
  33. bg = ACTIVE_BG if active else NORMAL_BG
  34. fg = ACTIVE_FG if active else NORMAL_FG
  35. img = Image.new("RGBA", (ICON_SIZE, ICON_SIZE), (255, 255, 255, 0))
  36. draw = ImageDraw.Draw(img)
  37. # 背景圆角方块
  38. draw.rounded_rectangle([4, 4, ICON_SIZE-4, ICON_SIZE-4], radius=16, fill=bg)
  39. if name == "home":
  40. draw_home(img, fg)
  41. elif name == "task":
  42. draw_task(img, fg)
  43. elif name == "my":
  44. draw_my(img, fg)
  45. suffix = "-active" if active else ""
  46. img.save(f"{OUTPUT_DIR}/{name}{suffix}.png", "PNG")
  47. if __name__ == "__main__":
  48. for name in ["home", "task", "my"]:
  49. create_icon(name, active=False)
  50. create_icon(name, active=True)
  51. print("tabBar icons generated.")