PNG32-Datei in PNG8 konvertieren, ohne den Alphakanal zu verlieren

4

Ich benutze Linux und habe keinen Zugriff auf eines der schicken Programme von Adobe.

Ich versuche, ein vorhandenes PNG32-Bild mit Alphakanal in PNG8 umzuwandeln. Ich habe die folgenden Methoden ausprobiert:

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

Was kann ich noch probieren?

LiraNuna
quelle

Antworten:

1

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);

Gib das in eine Datei und führe es wie folgt aus:

php convert.php input.png output.png
seltsam
quelle
2

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

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

Josh
quelle
Was für ein nützlicher Link, danke! Ich habe seit einiger Zeit nach einem solchen Werkzeug gesucht. Getestet pngnq und es erzeugt ein ausgezeichnetes Ergebnis, kleine Datei und glattes Alpha.
JJRV
1

Ihre Distribution enthält möglicherweise pngquant . Wenn Sie es mit yum / apt-get nicht finden können, besuchen Sie die Website. Ich denke, das ist Ihre beste Wahl.

Wenn Sie Probleme mit pngquant haben, können Sie es mit pngout versuchen , aber es ist ein langer Weg . Ich habe gehört, dass es einen guten Job macht, den Alpha-Kanal beizubehalten, aber es kann langsam sein. Möglicherweise ist die Langsamkeit der Menschen darauf zurückzuführen, dass die Standardstrategie "Extrem" lautet und der Autor zugibt, dass sie langsam ist.

Es ist ein Windows-Programm, aber es gibt (angeblich) Linux-Ports, aber der Link auf der Seite mit den Pngout-Autoren ist veraltet. Der Linux-Port-Betreuer JonoF unterhält hier jetzt eine Seite .

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

DaveParillo
quelle
pngquantDer Alpha-Kanal bleibt nicht erhalten. Es erzeugt die gleiche Ausgabe wie GIMP.
LiraNuna
pngoutwird nicht zusammenarbeiten -Unable to compress further: copying original file
LiraNuna
Beeindruckend. Kannst du dieses Bild irgendwo zur Verfügung stellen? Ich würde es gerne mal ausprobieren.
DaveParillo
Nehmen Sie einfach ein PNG32-Bild, ich verwende tatsächlich eines der Symbole aus Silk iconset - famfamfam.com/lab/icons/silk .
LiraNuna
Alle Symbole in famfamfam_silk_icons_v013.zip scheinen 8-Bit zu sein. Ich habe Probleme, ein 32-Bit-Bild im Web zu finden. Ich möchte niemanden dazu bringen, die Werkzeuge zu benutzen, die deine Trauer verursachen, da dies wahrscheinlich kein gültiger Test ist.
DaveParillo
0

Verwenden Sie pngquant , aber stellen Sie sicher, dass Sie eine neuere Version als 1.6 haben. Die neueste Version hat einen sehr guten Quantisierer, der in jedem Fall die libGD von PHP bei weitem übertreffen wird.

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

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

Kornel
quelle