34 lines
1.2 KiB
Python
34 lines
1.2 KiB
Python
#!/usr/bin/env python3
|
|
"""Issue #90 — círculo 200px RGBA (esquinas transparentes) para 2 autores nuevos.
|
|
Recorte cuadrado centrado en la cara + máscara circular supersampleada.
|
|
"""
|
|
from PIL import Image, ImageDraw
|
|
|
|
SRC = "/home/rafa/Feadulta"
|
|
OUT = "/home/rafa/joomla-migration/wordpress/wp-content/uploads/avatares/autores"
|
|
SIZE = 200
|
|
SS = 4 # supersampling para borde suave
|
|
|
|
# foto, uid, (left, top, side) recorte cuadrado en coords del original
|
|
JOBS = [
|
|
("MP_Lopez.jpeg", 474, (120, 0, 880)),
|
|
("A_delaCruz.jpeg", 993, (128, 0, 785)),
|
|
]
|
|
|
|
mask = Image.new("L", (SIZE * SS, SIZE * SS), 0)
|
|
ImageDraw.Draw(mask).ellipse((0, 0, SIZE * SS - 1, SIZE * SS - 1), fill=255)
|
|
mask = mask.resize((SIZE, SIZE), Image.LANCZOS)
|
|
|
|
for fname, uid, (l, t, side) in JOBS:
|
|
im = Image.open(f"{SRC}/{fname}").convert("RGB")
|
|
W, H = im.size
|
|
# clamp dentro de la imagen
|
|
l = max(0, min(l, W - side))
|
|
t = max(0, min(t, H - side))
|
|
crop = im.crop((l, t, l + side, t + side)).resize((SIZE, SIZE), Image.LANCZOS)
|
|
out = Image.new("RGBA", (SIZE, SIZE), (0, 0, 0, 0))
|
|
out.paste(crop, (0, 0))
|
|
out.putalpha(mask)
|
|
out.save(f"{OUT}/autor-{uid}.png")
|
|
print(f"OK autor-{uid}.png <- {fname} crop=({l},{t},{side})")
|