0.6.3: nuova icona (casa con l'onda calda); conteggi del README inglese allineati a 85/85
This commit is contained in:
+28
-23
@@ -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
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user