2010-04-21 10 views
4

Je générer beaucoup d'images en Java et de les enregistrer par la méthode ImageIO.write comme ceci:Comment enregistrer des images png optimisées avec ImageIO de Java?

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

Je suis satisfait des résultats jusqu'à ce que addon firefox Google « de vitesse » que je peux économiser jusqu'à 60 % de la taille si j'optimise les images. Les images sont des codes QR, leur taille est d'environ 900B chacune et les versions optimisées de firefox-plugin d'environ 300B. Je voudrais enregistrer ces images 300B optimisées directement à partir de Java.

Donc, voici ma question à nouveau: Comment enregistrer des images png optimisées avec ImageIO de Java?

+1

Si vous pouvez utiliser 'System' pour appeler un exécutable externe, utilisez OptiPNG. –

Répondre

4

Utilisez PngEncoderB pour convertir votre image buffered en un tableau d'octets codés PNG.

Vous pouvez lui appliquer un filtre, ce qui aide à préparer l'image pour une meilleure optimisation. C'est ce que fait OptiPNG, seul OptiPNG calcule quel filtre vous obtiendra la meilleure compression.

Vous devrez peut-être essayer d'appliquer chaque filtre pour voir lequel est toujours meilleur pour vous. Avec la couleur 2 bits, je pense que le seul filtre qui pourrait aider est "up", donc je suppose que c'est celui à utiliser. Une fois que vous obtenez l'image à un tableau d'octets codés PNG, vous pouvez écrire cela directement dans un fichier.

+0

Cela semble être une information assez absurdement obsolète - obsolète avant même que cette question ait été posée: _ "Cette fonctionnalité est maintenant incluse dans la bibliothèque javax.imageio fournie avec Java 1.4.1, mais PngEncoder peut être utile pour ceux qui ne veulent pas pour exiger la dernière version de Java. "_ (Java 1.4.1 a été publié en 2002) –

Questions connexes