Konvertieren PNG32 zu PNG8 mit PIL unter Beibehaltung der Transparenz

Möchte ich zu konvertieren ein PNG32-image (mit Transparenz) PNG8 mit Python Image Library.
Bisher ist es gelungen, die Umwandlung zu PNG8 mit einem einfarbigen hintergrund.

Unten ist das, was ich Tue:

from PIL import Image
im = Image.open("logo_256.png")
im = im.convert('RGB').convert('P', palette=Image.ADAPTIVE, colors=255)
im.save("logo_py.png", colors=255)
  • PNG32 hat 8 bit Transparenz, PNG8 hat nur 1, so dass es unmöglich ist, zu konvertieren treu. Können Sie damit Leben?
  • Ja, da es nur einen hintergrund, der transparent ist.
  • Bitte posten Sie Ihre Lösung als Antwort, Das passt das format der Website zu verbessern. Ich werde glücklich sein, um es ein upvote, wenn Sie tun.
  • PNG8 hat 256 Transparenzstufen pro Paletteneintrag, selbst ausprobieren: pngquant oder tinypng.
  • du hast natürlich Recht, aber in der Praxis finden Sie die Anzahl der Transparenz Ebenen begrenzt, da jede Kombination von Farbe und Transparenz nimmt einen Eintrag in der palette. GIF hat die Einschränkung, die ich Sprach, und die software, mit der ich gearbeitet habe vor vielen Jahren behandelt Sie beide gleich so manchmal auch heute noch bin ich verwirrt. Ich glaube, PIL auch funktioniert auf diese Weise. Es gab auch ein problem mit dem Internet Explorer falsch angezeigt PNG8 mit Transparenz-Abstufungen, aber ich denke, es ist schon fest für eine Weile.
InformationsquelleAutor montonero | 2011-05-24
Schreibe einen Kommentar