112 lines
3.8 KiB
Python
112 lines
3.8 KiB
Python
from PIL import Image, ImageDraw, ImageFont
|
|
import os
|
|
|
|
def create_fina_logo_round(size):
|
|
# Create image with transparent background
|
|
img = Image.new('RGBA', (size, size), (0, 0, 0, 0))
|
|
draw = ImageDraw.Draw(img)
|
|
|
|
center = size // 2
|
|
|
|
# Outer border circle (light blue/cyan ring)
|
|
border_width = int(size * 0.05)
|
|
draw.ellipse([0, 0, size, size], fill=(100, 180, 230, 255))
|
|
draw.ellipse([border_width, border_width, size - border_width, size - border_width],
|
|
fill=(0, 0, 0, 0))
|
|
|
|
# Background circle (dark blue gradient effect)
|
|
for i in range(15):
|
|
radius = (size // 2 - border_width) - i * 2
|
|
alpha = 255
|
|
color = (0, 50 + i * 3, 80 + i * 5, alpha)
|
|
draw.ellipse([center - radius, center - radius, center + radius, center + radius], fill=color)
|
|
|
|
# White inner circle
|
|
inner_radius = int(size * 0.38)
|
|
draw.ellipse([center - inner_radius, center - inner_radius, center + inner_radius, center + inner_radius],
|
|
fill=(245, 245, 245, 255))
|
|
|
|
# Shield (cyan/turquoise) - smaller for round design
|
|
shield_size = int(size * 0.22)
|
|
shield_x = int(center - shield_size * 0.6)
|
|
shield_y = int(center - shield_size * 0.4)
|
|
|
|
# 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, 220))
|
|
|
|
# Coins (orange/golden) - adjusted position
|
|
coin_radius = int(size * 0.07)
|
|
coin_x = int(center + shield_size * 0.35)
|
|
coin_y = int(center - shield_size * 0.15)
|
|
|
|
# Draw 3 stacked coins
|
|
for i in range(3):
|
|
y_offset = coin_y + i * int(coin_radius * 0.55)
|
|
# 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:
|
|
font_size = int(size * 0.13)
|
|
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.45)
|
|
|
|
# Text with cyan color
|
|
draw.text((text_x, text_y), text, fill=(43, 140, 238, 255), font=font)
|
|
|
|
return img
|
|
|
|
# Create all logo sizes
|
|
print("Creating round FINA logos...")
|
|
|
|
# Main logo for web app
|
|
logo_512 = create_fina_logo_round(512)
|
|
logo_512.save('logo.png')
|
|
logo_512.save('icon-512x512.png')
|
|
print("✓ Created logo.png (512x512)")
|
|
|
|
# PWA icon
|
|
logo_192 = create_fina_logo_round(192)
|
|
logo_192.save('icon-192x192.png')
|
|
print("✓ Created icon-192x192.png")
|
|
|
|
# Favicon
|
|
logo_64 = create_fina_logo_round(64)
|
|
logo_64.save('favicon.png')
|
|
print("✓ Created favicon.png (64x64)")
|
|
|
|
# Small icon for notifications
|
|
logo_96 = create_fina_logo_round(96)
|
|
logo_96.save('icon-96x96.png')
|
|
print("✓ Created icon-96x96.png")
|
|
|
|
# Apple touch icon
|
|
logo_180 = create_fina_logo_round(180)
|
|
logo_180.save('apple-touch-icon.png')
|
|
print("✓ Created apple-touch-icon.png (180x180)")
|
|
|
|
print("\nAll round FINA logos created successfully!")
|
|
print("Logos are circular/round shaped for PWA, notifications, and web app use.")
|