0.6.3: nuova icona (casa con l'onda calda); conteggi del README inglese allineati a 85/85

This commit is contained in:
2026-10-11 08:05:39 +02:00
parent 27f97dabef
commit e3e365cbfc
10 changed files with 46 additions and 31 deletions
+28 -23
View File
@@ -1,20 +1,25 @@
#!/usr/bin/env python3
"""Genera le icone di harbour-aira (86/108/128/172 px) in icons/<size>/.
Disegno originale (nessun logo di terzi): sfondo blu sfumato, goccia bianca e
un punto caldo arancione — acqua calda + pompa di calore.
Disegno scelto: **casa con l'onda calda dentro** — la proposta A di
scripts/icon_proposals.py, dove restano le altre direzioni provate. E' un
disegno originale: nessun logo di terzi, visto che il permesso per nome e logo
Aira non e' ancora arrivato.
Uso: python3 scripts/make_icons.py
"""
from PIL import Image, ImageDraw
import math
import pathlib
from PIL import Image, ImageDraw
SIZES = [86, 108, 128, 172]
BASE = 172 # si disegna grande e si ridimensiona: bordi puliti a ogni taglia
BASE = 344 # si disegna grande e si ridimensiona: bordi puliti a ogni taglia
TOP = (12, 62, 130) # blu profondo
BOTTOM = (24, 148, 190) # azzurro
WARM = (255, 138, 46) # arancione
WHITE = (255, 255, 255, 240)
def rounded_mask(size, radius):
@@ -32,29 +37,29 @@ def gradient(size):
return img.resize((size, size))
def onda(d, x0, x1, y, ampiezza, spessore, fill, creste=2):
"""L'onda calda: due creste dentro il corpo della casa."""
punti = []
passi = 120
for i in range(passi + 1):
t = i / passi
x = x0 + (x1 - x0) * t
punti.append((x, y + ampiezza * math.sin(2 * math.pi * creste * t)))
d.line(punti, fill=fill, width=int(spessore), joint="curve")
def draw_icon(size):
img = gradient(size).convert("RGBA")
d = ImageDraw.Draw(img)
# goccia: cerchio + triangolo verso l'alto
cx = size * 0.5
cy = size * 0.60
r = size * 0.19
d.ellipse([cx - r, cy - r, cx + r, cy + r], fill=(255, 255, 255, 235))
d.polygon([(cx, cy - 2.35 * r), (cx - r * 0.98, cy + r * 0.10), (cx + r * 0.98, cy + r * 0.10)],
fill=(255, 255, 255, 235))
# ricentra la goccia: il triangolo allunga verso l'alto
shift = -size * 0.05
img = img.transform(img.size, Image.AFFINE, (1, 0, 0, 0, 1, shift))
d = ImageDraw.Draw(img)
# punto caldo in basso a destra, dentro la goccia
wr = size * 0.085
wx, wy = cx + r * 0.10, cy + r * 0.30
for i in range(int(wr), 0, -1):
a = int(255 * (1 - i / wr) + 90)
d.ellipse([wx - i, wy - i, wx + i, wy + i], fill=WARM + (a,))
# tetto e corpo della casa
d.polygon([(size * 0.16, size * 0.50), (size * 0.50, size * 0.24),
(size * 0.84, size * 0.50)], fill=WHITE)
d.rectangle([size * 0.24, size * 0.50, size * 0.76, size * 0.78], fill=WHITE)
# onda calda dentro il corpo: sta sotto il tetto, altrimenti a 86 px si fonde
onda(d, size * 0.26, size * 0.74, size * 0.665, size * 0.040, size * 0.078,
WARM + (255,), creste=2)
return img