4 Stimmen

Wie speichert man optimierte png-Bilder mit ImageIO von Java?

Ich generiere viele Bilder in Java und speichere sie über die ImageIO.write Methode wie folgt:

final BufferedImage img = createSomeImage();
ImageIO.write( img, "png", new File( "/some/file.png" );

Ich war mit den Ergebnissen zufrieden, bis mir das Firefox-Addon 'Page Speed' von Google sagte, dass ich bis zu 60 % der Größe einsparen kann, wenn ich die Bilder optimiere. Bei den Bildern handelt es sich um QR-Codes, die jeweils etwa 900B groß sind, und die mit dem Firefox-Plugin optimierten Versionen sind etwa 300B groß. Ich möchte solche optimierten 300B-Bilder direkt aus Java speichern.

Also hier noch einmal meine Frage: Wie kann man optimierte png-Bilder mit ImageIO von Java speichern?

4voto

Marcus Adams Punkte 51234

Verwenden Sie PngEncoderB um Ihr BufferedImage in ein PNG-kodiertes Byte-Array umzuwandeln.

Sie können einen Filter darauf anwenden, der das Bild für eine bessere Optimierung vorbereitet. Genau das tut OptiPNG, nur dass OptiPNG berechnet, welcher Filter die beste Kompression erzielt.

Vielleicht müssen Sie jeden Filter ausprobieren, um herauszufinden, welcher für Sie besser geeignet ist. Mit 2-Bit-Farbe, ich denke, der einzige Filter, der helfen könnte, ist "up", so dass ich vermute, das ist die eine zu verwenden.

Sobald Sie das Bild in ein PNG-kodiertes Byte-Array umgewandelt haben, können Sie es direkt in eine Datei schreiben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X