Konvertierung der PNG32-Datei in PNG8 ohne den Alphakanal zu verlieren

4290
LiraNuna

Ich verwende Linux und habe keinen Zugriff auf die "schicken" Programme von Adobe.

Ich versuche, ein vorhandenes PNG32-Bild mit Alphakanal nach PNG8 zu konvertieren. Ich habe folgende Methoden ausprobiert:

  • convert original.png PNG8:new.png - Verzerrt das Bild schrecklich und erhält nur binäres Alpha (nicht indiziertes Alpha)
  • GIMP - schlägt ebenfalls fehl, erzeugt jedoch eine bessere Qualität (guter Farbquantisierer) als ImageMagick.
  • pngcrush -rem alla -reduce -brute original.png new.png - Das Bild wurde kleiner gemacht, die Quantisierung wurde jedoch nicht berücksichtigt (Das Bild hat weniger als 256 Farben), sodass die Ausgabe immer noch PNG32 war.

Was kann ich noch probieren?

4

4 Antworten auf die Frage

2
Josh

Ich weiß, ich bin ein bisschen spät zur Party, aber das hat mich kürzlich in ein Webprojekt gebissen, an dem ich gerade arbeite.

Ich habe pngnq für die Batch-Konvertierung verwendet und mein PNG8 sah noch nie besser aus. Tatsächlich sind -s 1die Ergebnisse mit der höchsten Abtastrate ( ) kaum von einem vollständigen PNG32 zu unterscheiden.

Was für ein nützlicher Link, danke! Ich habe schon lange nach einem solchen Werkzeug gesucht. Getestet pngnq und erzeugt ein hervorragendes Ergebnis, eine kleine Datei und ein glattes Alpha. jjrv vor 12 Jahren 0
1
DaveParillo

Ihre Distribution kann pngquant enthalten . Wenn Sie es mit yum / apt-get nicht finden können, besuchen Sie die Website. Ich denke, das ist deine beste Wette.

Wenn Sie Probleme mit Pngquant haben, können Sie Pngout ausprobieren, aber es ist ein langer Weg . Ich habe gehört, dass es gut ist, den Alphakanal beizubehalten, kann aber langsam sein. Möglicherweise liegt die Langsamkeit der Menschen darin, dass die Standardstrategie "Extrem" ist, die der Autor zugegebenermaßen langsam ist.

Es ist ein Windows-Programm, aber es gibt (vermutlich) Linux-Ports, aber der Link auf der Pngout-Autorenseite ist veraltet. Der Linux-Port-Verwalter JonoF führt hier jetzt eine Seite .

Ich muss zugeben, dass ich es nie benutzt habe. Viel Glück!

`pngquant` bewahrt den Alphakanal nicht. Es erzeugt die gleiche Ausgabe wie GIMP. LiraNuna vor 14 Jahren 0
`pngout` kooperiert nicht -` Kann nicht weiter komprimiert werden: Kopieren der Originaldatei` LiraNuna vor 14 Jahren 0
wow. can you make this image available somewhere? I'd like to take a crack at it. DaveParillo vor 14 Jahren 0
Nehmen Sie einfach ein beliebiges PNG32-Bild. Ich verwende tatsächlich eines der Icons von Silk-Iconset - http://www.famfamfam.com/lab/icons/silk/. LiraNuna vor 14 Jahren 0
All the icons in famfamfam_silk_icons_v013.zip appear to be 8-bit. I'm having trouble finding a 32 bit image on the web. Don't want to make one myself using the tools that are causing your grief as that's not likely a valid test. DaveParillo vor 14 Jahren 0
found a 32bit image with I think every possible transparency levle set: http://www.virtualmechanics.com/support/tutorials-spinnerpro/image/obj4120geo2655shd297pg5p6.png. Now I see your problem ;-) DaveParillo vor 14 Jahren 0
1
strager

Dieses PHP-Skript macht den Trick mit libgd:

<?PHP  if(!isset($argv[1]) || !is_readable($argv[1])) { echo "Creates an 8-bit PNG from a 32-bit PNG\n\n"; echo "Usage:\n"; echo "\t" . $argv[0] . " input.png > output.png\n"; echo "\t" . $argv[0] . " input.png output.png\n"; die(); }  $inFile = $argv[1]; $outFile = $argv[2] or STDOUT;  $inImage = imagecreatefrompng($inFile); $outImage = imagecreate(imagesx($inImage), imagesy($inImage));  imagecopy($outImage, $inImage, 0, 0, 0, 0, imagesx($inImage), imagesy($inImage));  imagepng($outImage, $outFile); 

Legen Sie das in eine Datei und führen Sie es als aus:

php convert.php input.png output.png 
0
Kornel

Verwenden Sie pngquant, stellen Sie jedoch sicher, dass Sie eine ältere Version als 1.6 haben. Die neueste Version hat einen sehr guten Quantizer, der PHP's libGD in jedem Fall bei weitem übertrifft.

Debian Wheezy enthält immer noch eine 13 Jahre alte Version, deren Ausgabe von geringer Qualität ist. Es gibt ein gutes pngquant-Paket für Debian-Experimentalversionen und die meisten anderen Linux-Distributionen.

Wenn Ihre Distribution nur veraltet ist pngquant, verwenden Sie pngnqstattdessen.