32 Bit png in 8 bit png mit ImageMagick konvertieren, indem halbtransparente Pixel beibehalten werden

8

Ich möchte mit ImageMagick 32 Bit PNG in 8 Bit PNG konvertieren, aber halbtransparente Pixel gehen verloren. Wie man dieses Problem löst? Der Befehl, den ich verwende, ist der folgende

%Vor%     
Karmar 25.12.2012, 15:37
quelle

1 Antwort

10

Obwohl das PNG-Format tatsächlich erlaubt, dass alle Farben in einem 8-Bit-Index-Farb-PNG vollständig oder teilweise transparent sind, ist ImageMagicks "PNG8" Formatbezeichner unterstützt nur 1-Bit-Transparenz im GIF-Stil.

Es ist möglich, indizierte 8-Bit-PNGs mit ImageMagick by not unter Verwendung des PNG8: -Spezifizierers zu erstellen, aber einfach -colors 256 oder -colors 255 * zu verwenden, um die Anzahl der Farben im Bild zu reduzieren . Leider, zumindest auf der Grundlage meiner Tests mit ImageMagick 6.8.9, haben die resultierenden Bilder einige ziemlich seltsame und ziemlich unnötig hässliche Farbquantisierungsartefakte.

Glücklicherweise gibt es ein viel besseres Werkzeug für diesen speziellen Job: pngquant . Damit ist das Konvertieren eines 32-Bit-RGBA-PNG in ein 8-Bit-Farbmapping-PNG mit minimalem Qualitätsverlust so einfach wie:

%Vor%

Als schnelle Demonstration wird hier ein einfaches Testbild (ein Stern mit einem halbtransparenten Schlagschatten) mit verschiedenen Methoden in 8-Bit PNG konvertiert:

  

           

Von links nach rechts:

  1. Original 32-Bit RGBA PNG
  2. Quantifiziert mit pngquant 256 < input.png > output.png
  3. Quantifiziert mit convert input.png -colors 255 output.png *
  4. Quantifiziert mit convert input.png PNG8:output.png
  5. Quantifiziert mit convert input.png -colors 255 PNG8:output.png *

*) In den folgenden Kommentaren wird vorgeschlagen, dass -colors 255 notwendig ist, um einen Eintrag für die Hintergrundfarbe zu reservieren. Basierend auf meinen Tests habe ich nicht beobachtet, dass dies tatsächlich der Fall ist; Mit -colors 256 wird immer noch ein 8-Bit-color-mapped-PNG , mit Quantisierungsartefakten, die qualitativ der Ausgabe mit -colors 255 qualitativ ähnlich sind, sich aber in Einzelheiten unterscheiden. Um auf Nummer sicher zu gehen, habe ich -colors 255 für die obigen Beispiele verwendet. Das Reduzieren der Colormap-Größe um eine Farbe sollte an sich nicht signifikant die Qualität der Ergebnisse beeinflussen, da ein Test mit pngquant 255 demonstriere .

    
Ilmari Karonen 25.12.2012 15:53
quelle