fix: hochgeladene Logos auf Anzeigegroesse zuschneiden
Ein hochgeladenes Logo erschien auf der Willkommensseite deutlich kleiner als ein automatisch gefundenes. Ursache ist nicht die CSS - beide nutzen dieselbe Klasse - sondern der Bildinhalt: nach dem Freistellen ist der Rand zwar durchsichtig, zaehlt aber weiter zur Bildflaeche. .customer-logo skaliert mit object-fit: contain auf 120px Hoehe, ein Logo mit breitem Rand erscheint dadurch nur einen Bruchteil davon gross (gemessen: 30px statt 120px). Brandfetch-Logos sind bereits eng beschnitten und fuellen den Kasten aus. trim_transparent_border() schneidet die durchsichtigen Raender nach dem Freistellen weg. Greift auch bei bereits transparenten PNGs; bei abgewaehltem Freistellen passiert nichts, da es dort keinen transparenten Rand gibt. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -65,6 +65,22 @@ def _border_color(px, w, h):
|
||||
return mitte, streuung <= LOGO_BORDER_UNIFORMITY
|
||||
|
||||
|
||||
def trim_transparent_border(img):
|
||||
"""Schneidet durchsichtige Raender weg, sodass das Logo die Bildflaeche
|
||||
ausfuellt.
|
||||
|
||||
Ohne das erscheint ein hochgeladenes Logo kleiner als ein automatisch
|
||||
gefundenes: die Willkommensseite skaliert mit object-fit: contain auf
|
||||
eine feste Hoehe, und ein breiter durchsichtiger Rand zaehlt dabei mit.
|
||||
Brandfetch-Logos sind bereits eng beschnitten."""
|
||||
if img.mode != "RGBA":
|
||||
return img
|
||||
bbox = img.getchannel("A").getbbox()
|
||||
if not bbox or bbox == (0, 0, img.width, img.height):
|
||||
return img
|
||||
return img.crop(bbox)
|
||||
|
||||
|
||||
def remove_logo_background(image, tolerance=LOGO_TOLERANCE):
|
||||
"""Stellt ein Logo frei: entfernt den zusammenhängenden Hintergrund von den
|
||||
Rändern her und macht ihn transparent.
|
||||
@@ -175,6 +191,13 @@ def save_uploaded_logo(file_storage, site, slot, freistellen=True):
|
||||
else:
|
||||
img = img.convert("RGBA")
|
||||
|
||||
# Nach dem Freistellen zuschneiden, damit das Logo genauso gross erscheint
|
||||
# wie ein automatisch gefundenes
|
||||
vorher = img.size
|
||||
img = trim_transparent_border(img)
|
||||
if img.size != vorher:
|
||||
print(f"✅ Generate - Logo zugeschnitten: {vorher[0]}x{vorher[1]} → {img.size[0]}x{img.size[1]}")
|
||||
|
||||
logo_dir = os.path.join(MEDIA_DIR, site, LOGO_DIRNAME)
|
||||
os.makedirs(logo_dir, exist_ok=True)
|
||||
dateiname = f"logo_{slot}.png"
|
||||
|
||||
Reference in New Issue
Block a user