Frage

Ich versuche, programmatisch zu reduzieren (verlustbehaftete) die Dateigröße von PNG und GIF-Dateien. Als Teil davon muss ich die Anzahl der Farben in den Bildern reduzieren. Ich will nicht alle die Bilder zu einem einzigen Farbe Wert zu reduzieren, so, was ich tue, ist; erhält die Anzahl der einzelnen Farben im Bild, dann; teilt diese Zahl durch 2, um die Anzahl der Farben, um die Hälfte zu reduzieren.

Das Problem ist, das nicht funktioniert. Mit ImageMagick es ist viel zu langsam und verringert nicht die Dateigröße, wenn das Bild unter ein paar hundert einzigartigen Farben hat. Mit GraphicsMagick führt immer zu einem einzigartigen Farbe-Wert unter 255 unabhängig davon, wie viele Farben im Originalbild waren. Ein weiteres Problem bei GraphicsMagick ist, wenn es irgendwelche transparenten Pixel im Bild, um es um die verlorenen Farben mit transparentem ersetzt.

Jede Hilfe wäre dankbar sein willkommen, Danke.

War es hilfreich?

Lösung 3

Die erste Problem kann GraphicsMagick mit 8-Bit kompiliert werden, 16-Bit oder 32-Bit-Quantenniveaus. Meine Version ist in 8 Bit kompiliert (Standardeinstellung), bedeutet dies, dass die maximale Anzahl von Farben, die zu einem Bild zugeordnet werden können 256 einzigartige Farben (3 * 3 * 2, 1 des blauen Bits, weil das menschlichen Auge entfernt ‚t sehen es richtig). Offensichtlich kann GraphicsMagick behandeln Bilder mit mehr Farben als das, aber wenn die Farben reduzieren kann es nur auf 256 oder weniger Farben reduzieren. Größere Pixel quantums verursacht GraphicsMagick langsamer laufen und mehr Speicher benötigen. Zum Beispiel sechzehn-Bit-Pixel quantums mit verursacht GraphicsMagick 15% bis 50% langsamer laufen (und doppelt so viel Speicherplatz verbrauchen), als wenn es gebaut wird acht-Bit-Pixel quantums zu unterstützen.

Zweites Problem; in PNG-Bildern Transparenz Handhabung, war ich mit einer früheren Version von GraphicsMagick (1.1 glaube ich), wie auch immer, wenn ich auf 1.3 dieses Problem aufgerüstet ist nicht mehr vorhanden, die mir sagt, dass es ein Fehler in GraphicsMagick 1.1 ist, dass dies verursacht wird.

Andere Tipps

die Anzahl der Farben zu reduzieren, ist nur sinnvoll, wenn

  1. Das Bild kann dann eine Palette verwenden, anstatt die Farbe für jedes Pixel zu speichern
  2. die Größe eines Palettenindex kleiner ist als die Größe einer Farbe
  3. das Bildformat unterstützt die Palette Größe

Ich glaube, man bekommt, kann 1-Bit, 4 Bit, 8-bit, so 2-Farben, 16 Farben oder 256 Farben in diesen Formaten. Ich denke, wenn man mehr verlangen, die Sie gerade auf 256 gekürzt, wenn man für weniger fragen, es funktioniert einfach nicht die gesamte Palette verwenden.

Haben Sie darüber nachgedacht zu JPEG konvertieren und mit der Qualitätseinstellung zu spielen? Sie enden mit mehr Feinkorn Kontrolle der verlustbehafteten Heit auf. Der Nachteil ist, wenn die Bilder keine Bilder sind, aber es klingt wie sie viele Farben haben, so dass sie sein könnten.

Vielleicht wählt 1, 4, 8 Bit, wenn es in der Nähe zu dem, was Sie wollen und jpeg, wenn es viele Farben hat.

Ich denke, die ImageMagick-Anlage sind Sie nach könnten Quantisierung sein:

http://www.imagemagick.org/Usage/quantize/

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top