fina/app/static/icons/create_logo.py

88 lines
2.9 KiB
Python
Raw Normal View History

2025-12-26 00:52:56 +00:00
from PIL import Image, ImageDraw, ImageFont
import os
def create_fina_logo(size):
# Create image with transparent background
img = Image.new('RGBA', (size, size), (0, 0, 0, 0))
draw = ImageDraw.Draw(img)
# Background circle (dark blue gradient effect)
center = size // 2
for i in range(10):
radius = size // 2 - i * 2
alpha = 255 - i * 20
color = (0, 50 + i * 5, 80 + i * 8, alpha)
draw.ellipse([center - radius, center - radius, center + radius, center + radius], fill=color)
# White inner circle
inner_radius = int(size * 0.42)
draw.ellipse([center - inner_radius, center - inner_radius, center + inner_radius, center + inner_radius],
fill=(245, 245, 245, 255))
# Shield (cyan/turquoise)
shield_size = int(size * 0.25)
shield_x = int(center - shield_size * 0.5)
shield_y = int(center - shield_size * 0.3)
# Draw shield shape
shield_points = [
(shield_x, shield_y),
(shield_x + shield_size, shield_y),
(shield_x + shield_size, shield_y + int(shield_size * 0.7)),
(shield_x + shield_size // 2, shield_y + int(shield_size * 1.2)),
(shield_x, shield_y + int(shield_size * 0.7))
]
draw.polygon(shield_points, fill=(64, 224, 208, 200))
# Coins (orange/golden)
coin_radius = int(size * 0.08)
coin_x = int(center + shield_size * 0.3)
coin_y = int(center - shield_size * 0.1)
# Draw 3 stacked coins
for i in range(3):
y_offset = coin_y + i * int(coin_radius * 0.6)
# Coin shadow
draw.ellipse([coin_x - coin_radius + 2, y_offset - coin_radius + 2,
coin_x + coin_radius + 2, y_offset + coin_radius + 2],
fill=(100, 70, 0, 100))
# Coin body (gradient effect)
for j in range(5):
r = coin_radius - j
brightness = 255 - j * 20
draw.ellipse([coin_x - r, y_offset - r, coin_x + r, y_offset + r],
fill=(255, 180 - j * 10, 50 - j * 5, 255))
# Text "FINA"
try:
# Try to use a bold font
font_size = int(size * 0.15)
font = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf", font_size)
except:
font = ImageFont.load_default()
text = "FINA"
text_bbox = draw.textbbox((0, 0), text, font=font)
text_width = text_bbox[2] - text_bbox[0]
text_height = text_bbox[3] - text_bbox[1]
text_x = center - text_width // 2
text_y = int(center + inner_radius * 0.5)
# Text with cyan color
draw.text((text_x, text_y), text, fill=(64, 200, 224, 255), font=font)
return img
# Create logos
logo_512 = create_fina_logo(512)
logo_512.save('logo.png')
logo_512.save('icon-512x512.png')
logo_192 = create_fina_logo(192)
logo_192.save('icon-192x192.png')
logo_64 = create_fina_logo(64)
logo_64.save('favicon.png')
print("FINA logos created successfully!")