wie man ein Logo ohne weißen Hintergrund (transparent?) mit Hilfe von pil round_corner?

8

Ich habe ein quadratisches Logo und ich muss es runder_korrigieren, habe eine Weile gesucht und den folgenden Code "funktioniert":

%Vor%

Dann habe ich das zurückgegebene Bildobjekt gespeichert, aber es hat einen weißen Hintergrund in der Ecke so Wie kann ich den weißen Hintergrund loswerden oder unsichtbar machen? Vielen Dank im Voraus ~

BEARBEITEN: Hier ist der Code von Fraxel, danke ~

%Vor%

Es tut mir leid. Ich brauche die Bildform, um Ellipse nicht Rechteck, I.E. das Schreiben Zeug aus dem Bild, und @fraxel, ich kann immer noch die weiße Ecke in dem Bild, das Sie für mich verarbeitet

    
bdictator 02.07.2012, 03:09
quelle

2 Antworten

15

Stellen Sie zuerst sicher, dass Sie Ihr Bild in einem Format speichern, das Transparenz unterstützt. PNG does, JPG nicht ... Unten ist ein ziemlich netter Code, der transparente Ecken hinzufügt. Es funktioniert so:

  1. Zeichnet einen Kreis mit Radius, rad , mit draw.ellipse()
  2. Erstellen Sie ein Bild für den Alphakanal in derselben Größe wie Ihr Bild
  3. Zerhacke unseren Kreis in vier Teile (die abgerundeten Ecken) und lege sie in die richtigen Ecken des Alpha-Bildes
  4. Fügen Sie den Alpha-Kanal mit putalpha() in Ihr Bild ein.
  5. Speichern Sie als png und bewahren Sie so Transparenz.

Hier ist der Code:

%Vor%

Beispiel gekrümmte Kante Tiger:

Hier ist Ihr Bild, das mit diesem Code bearbeitet wurde und transparente Ecken bietet:

    
fraxel 02.07.2012, 09:58
quelle
1

Haben Sie etwas wie image.putalpha(mask) probiert, um den Alphakanal des Bildes durch die Maske zu ersetzen? Das scheint so zu sein, als würde es tun, was du willst. mask muss möglicherweise im "L" -Modus sein, damit dies korrekt funktioniert, und image sollte wahrscheinlich 'RGBA' sein, wird aber möglicherweise automatisch für Sie konvertiert.

Die beste Antwort hier bietet einige gute Beispiele: Wie erstelle ich kreisförmige Thumbnails mit PIL?

Ihr Maskenbild sieht gut aus, aber ich denke, Sie möchten "weiß" und "schwarz" tauschen, also haben Sie ein weißes abgerundetes Rechteck, genau die Form, auf der Ihr endgültiges Bild sein soll, auf schwarzem Hintergrund. Sie werden wahrscheinlich auch den "L" -Modus (Graustufen) verwenden müssen.

Sobald Sie dieses Bild haben, können Sie return ImageChops.add(mask, image) durch image.putalpha(mask); return image ersetzen und das Bild sollte nur in den schwarzen Bereichen der Maske transparent sein.

Sie müssen möglicherweise zuerst das Bild mit image.convert('RGBA') konvertieren, aber ich denke, dass dies in späteren Versionen von PIL nicht notwendig ist, macht es automatisch.

Etwas wie: (Entschuldigung, ich kann das jetzt nicht testen)

%Vor%     
mesilliac 02.07.2012 03:57
quelle