feat: add custom timer app icon
This commit is contained in:
Binary file not shown.
|
Before Width: | Height: | Size: 130 KiB After Width: | Height: | Size: 17 KiB |
115
scripts/generate_icon.py
Normal file
115
scripts/generate_icon.py
Normal file
@@ -0,0 +1,115 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""Generate Daily Timer app icon - a stylized stopwatch/timer"""
|
||||||
|
|
||||||
|
from PIL import Image, ImageDraw
|
||||||
|
import math
|
||||||
|
|
||||||
|
def create_timer_icon(size=1024):
|
||||||
|
# Create image with transparent background
|
||||||
|
img = Image.new('RGBA', (size, size), (0, 0, 0, 0))
|
||||||
|
draw = ImageDraw.Draw(img)
|
||||||
|
|
||||||
|
center = size // 2
|
||||||
|
margin = size // 10
|
||||||
|
radius = center - margin
|
||||||
|
|
||||||
|
# Colors
|
||||||
|
bg_color = (45, 55, 72, 255) # Dark blue-gray background
|
||||||
|
ring_color = (99, 179, 237, 255) # Light blue ring
|
||||||
|
accent_color = (72, 187, 120, 255) # Green accent
|
||||||
|
hand_color = (255, 255, 255, 255) # White hands
|
||||||
|
warning_color = (237, 137, 54, 255) # Orange warning segment
|
||||||
|
|
||||||
|
# Draw circular background
|
||||||
|
draw.ellipse(
|
||||||
|
[margin, margin, size - margin, size - margin],
|
||||||
|
fill=bg_color,
|
||||||
|
outline=ring_color,
|
||||||
|
width=size // 25
|
||||||
|
)
|
||||||
|
|
||||||
|
# Draw inner circle (face)
|
||||||
|
inner_margin = margin + size // 12
|
||||||
|
draw.ellipse(
|
||||||
|
[inner_margin, inner_margin, size - inner_margin, size - inner_margin],
|
||||||
|
fill=(55, 65, 81, 255),
|
||||||
|
outline=(75, 85, 99, 255),
|
||||||
|
width=2
|
||||||
|
)
|
||||||
|
|
||||||
|
# Draw hour marks
|
||||||
|
mark_radius_outer = radius - size // 20
|
||||||
|
mark_radius_inner = radius - size // 10
|
||||||
|
for i in range(12):
|
||||||
|
angle = math.radians(i * 30 - 90)
|
||||||
|
x1 = center + mark_radius_inner * math.cos(angle)
|
||||||
|
y1 = center + mark_radius_inner * math.sin(angle)
|
||||||
|
x2 = center + mark_radius_outer * math.cos(angle)
|
||||||
|
y2 = center + mark_radius_outer * math.sin(angle)
|
||||||
|
width = size // 40 if i % 3 == 0 else size // 60
|
||||||
|
draw.line([(x1, y1), (x2, y2)], fill=hand_color, width=width)
|
||||||
|
|
||||||
|
# Draw progress arc (green, showing ~70% complete)
|
||||||
|
arc_margin = margin + size // 30
|
||||||
|
draw.arc(
|
||||||
|
[arc_margin, arc_margin, size - arc_margin, size - arc_margin],
|
||||||
|
start=-90,
|
||||||
|
end=160,
|
||||||
|
fill=accent_color,
|
||||||
|
width=size // 20
|
||||||
|
)
|
||||||
|
|
||||||
|
# Draw warning segment (orange, last 30%)
|
||||||
|
draw.arc(
|
||||||
|
[arc_margin, arc_margin, size - arc_margin, size - arc_margin],
|
||||||
|
start=160,
|
||||||
|
end=270,
|
||||||
|
fill=warning_color,
|
||||||
|
width=size // 20
|
||||||
|
)
|
||||||
|
|
||||||
|
# Draw minute hand (long)
|
||||||
|
minute_length = radius * 0.65
|
||||||
|
minute_angle = math.radians(160 - 90) # Pointing to ~5:20
|
||||||
|
minute_end = (
|
||||||
|
center + minute_length * math.cos(minute_angle),
|
||||||
|
center + minute_length * math.sin(minute_angle)
|
||||||
|
)
|
||||||
|
draw.line([(center, center), minute_end], fill=hand_color, width=size // 40)
|
||||||
|
|
||||||
|
# Draw second hand (thin, red)
|
||||||
|
second_length = radius * 0.7
|
||||||
|
second_angle = math.radians(200 - 90) # Pointing to ~6:40
|
||||||
|
second_end = (
|
||||||
|
center + second_length * math.cos(second_angle),
|
||||||
|
center + second_length * math.sin(second_angle)
|
||||||
|
)
|
||||||
|
draw.line([(center, center), second_end], fill=(239, 68, 68, 255), width=size // 80)
|
||||||
|
|
||||||
|
# Draw center dot
|
||||||
|
dot_radius = size // 25
|
||||||
|
draw.ellipse(
|
||||||
|
[center - dot_radius, center - dot_radius,
|
||||||
|
center + dot_radius, center + dot_radius],
|
||||||
|
fill=ring_color
|
||||||
|
)
|
||||||
|
|
||||||
|
# Draw small button on top (timer button)
|
||||||
|
button_width = size // 12
|
||||||
|
button_height = size // 10
|
||||||
|
button_x = center - button_width // 2
|
||||||
|
button_y = margin - button_height // 2
|
||||||
|
draw.rectangle(
|
||||||
|
[button_x, button_y, button_x + button_width, button_y + button_height],
|
||||||
|
fill=ring_color,
|
||||||
|
outline=bg_color,
|
||||||
|
width=2
|
||||||
|
)
|
||||||
|
|
||||||
|
return img
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
icon = create_timer_icon(1024)
|
||||||
|
output_path = "/Users/admin-msk/git/daily-timer/build/appicon.png"
|
||||||
|
icon.save(output_path, "PNG")
|
||||||
|
print(f"Icon saved to {output_path}")
|
||||||
Reference in New Issue
Block a user