traduzioni 4 lingue e catalogo razze portati dai sorgenti Flutter; asset foto, icone dall'artwork originale, test node
This commit is contained in:
+48
-33
@@ -1,15 +1,18 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Genera le icone dell'app in stile Sailfish OS:
|
||||
sfondo a gradiente ambrato->arancio bruciato con angoli molto arrotondati,
|
||||
un uovo bianco con ombra morbida e una pagliuzza di grano.
|
||||
Dimensioni: 86, 108, 128, 172 (struttura standard hicolor)."""
|
||||
import os
|
||||
from PIL import Image, ImageDraw
|
||||
"""Genera le icone dell'app in stile Sailfish OS a partire dall'artwork
|
||||
originale dell'app (assets/icon_source.png: gallina su un uovo con una foglia).
|
||||
|
||||
C_TOP = (250, 214, 137) # #FAD689 ambrato chiaro
|
||||
C_BOT = (196, 122, 41) # #C47A29 arancio bruciato
|
||||
EGG = (255, 253, 246)
|
||||
STRAW = (255, 236, 179)
|
||||
Sfondo: rettangolo arrotondato con gradiente bianco -> verde tenue.
|
||||
Soggetto: ritagliato dallo sfondo bianco PER CONNESSIONE AI BORDI (flood fill),
|
||||
cosi' il bianco interno dell'uovo non viene forato.
|
||||
Dimensioni: 86, 108, 128, 172 (struttura standard hicolor).
|
||||
"""
|
||||
import os
|
||||
from PIL import Image, ImageDraw, ImageFilter
|
||||
|
||||
SRC = "assets/icon_source.png"
|
||||
C_TOP = (255, 255, 255)
|
||||
C_BOT = (233, 243, 226) # #E9F3E2 verde tenue
|
||||
|
||||
|
||||
def gradient(size, c1, c2):
|
||||
@@ -24,8 +27,34 @@ def gradient(size, c1, c2):
|
||||
return img
|
||||
|
||||
|
||||
def draw_icon(size):
|
||||
m = size * 0.05
|
||||
def subject_with_alpha():
|
||||
"""Ritorna l'artwork RGBA con lo sfondo bianco reso trasparente."""
|
||||
im = Image.open(SRC).convert("RGB")
|
||||
w, h = im.size
|
||||
|
||||
# flood fill dai quattro angoli sullo sfondo bianco connesso ai bordi
|
||||
marked = im.copy()
|
||||
for xy in ((0, 0), (w - 1, 0), (0, h - 1), (w - 1, h - 1)):
|
||||
ImageDraw.floodfill(marked, xy, (255, 0, 255), thresh=60)
|
||||
|
||||
alpha = Image.new("L", (w, h), 255)
|
||||
px_m, px_a = marked.load(), alpha.load()
|
||||
for y in range(h):
|
||||
for x in range(w):
|
||||
if px_m[x, y] == (255, 0, 255):
|
||||
px_a[x, y] = 0
|
||||
|
||||
# bordo morbido: piccola sfocatura + soglia, per togliere i frastagli
|
||||
# del JPEG lungo i contorni
|
||||
alpha = alpha.filter(ImageFilter.GaussianBlur(0.8)).point(lambda v: 0 if v < 110 else 255)
|
||||
|
||||
out = im.convert("RGBA")
|
||||
out.putalpha(alpha)
|
||||
return out
|
||||
|
||||
|
||||
def draw_icon(size, subject):
|
||||
m = size * 0.045
|
||||
r = size * 0.22
|
||||
out = Image.new("RGBA", (size, size), (0, 0, 0, 0))
|
||||
|
||||
@@ -35,33 +64,19 @@ def draw_icon(size):
|
||||
radius=r, fill=255)
|
||||
out.paste(grad, (0, 0), mask)
|
||||
|
||||
d = ImageDraw.Draw(out, "RGBA")
|
||||
|
||||
# pagliuzza: due archi chiari in basso, suggeriscono il nido
|
||||
lw = max(2, int(size * 0.03))
|
||||
for k, off in ((0.0, 0.0), (0.06, 0.03)):
|
||||
d.arc([size * (0.16 + k), size * (0.62 + off),
|
||||
size * (0.84 - k), size * (1.02 + off)],
|
||||
start=200, end=340, fill=STRAW + (110,), width=lw)
|
||||
|
||||
# uovo bianco, leggermente spostato in alto, con ombra morbida
|
||||
ex0, ey0 = size * 0.30, size * 0.22
|
||||
ex1, ey1 = size * 0.70, size * 0.70
|
||||
d.ellipse([ex0 + size * 0.015, ey0 + size * 0.02,
|
||||
ex1 + size * 0.015, ey1 + size * 0.02],
|
||||
fill=(90, 50, 10, 70))
|
||||
d.ellipse([ex0, ey0, ex1, ey1], fill=EGG + (255,))
|
||||
|
||||
# riflesso
|
||||
d.ellipse([size * 0.35, size * 0.30, size * 0.45, size * 0.40],
|
||||
fill=(255, 255, 255, 120))
|
||||
# soggetto centrato, all'82% dell'area utile
|
||||
box = size - 2 * m
|
||||
art = subject.copy()
|
||||
art.thumbnail((int(box * 0.82), int(box * 0.82)), Image.LANCZOS)
|
||||
out.alpha_composite(art, (int((size - art.width) / 2), int((size - art.height) / 2)))
|
||||
return out
|
||||
|
||||
|
||||
def main():
|
||||
subject = subject_with_alpha()
|
||||
for s in (86, 108, 128, 172):
|
||||
os.makedirs(f"icons/{s}x{s}", exist_ok=True)
|
||||
draw_icon(s).save(f"icons/{s}x{s}/harbour-henflow.png")
|
||||
draw_icon(s, subject).save(f"icons/{s}x{s}/harbour-henflow.png")
|
||||
print("icone scritte: 86, 108, 128, 172")
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user