Conversion de PNG en JPEG
Je vais avoir des problèmes pour la conversion d'un simple PNG dans un format JPEG.
Je suis en utilisant le code suivant:
...
File png = new File(filePath);
try {
SeekableStream s = new FileSeekableStream(png);
PNGDecodeParam pngParams = new PNGDecodeParam();
ImageDecoder dec = ImageCodec.createImageDecoder("png", s, pngParams);
RenderedImage pngImage = dec.decodeAsRenderedImage();
JPEGEncodeParam jparam = new JPEGEncodeParam();
jparam.setQuality(0.50f); //e.g. 0.25f
File jpeg = new File("jpeg.jpeg");
FileOutputStream out = new FileOutputStream(jpeg);
ImageEncoder encoder = ImageCodec.createImageEncoder("JPEG", out, jparam);
encoder.encode(pngImage);
s.close();
} catch (IOException e) {
ok = false;
e.printStackTrace();
}
return ok;
}
...
Je me retrouve avec une JAI exception ->
java.lang.RuntimeException: Seulement 1 ou 3-groupe d'octets de données peuvent être écrites.
au com.soleil.médias.jai.codecimpl.JPEGImageEncoder.coder(JPEGImageEncoder.java:148) ...
A manqué d'options. Toute suggestion?
source d'informationauteur Norberto
Vous devez vous connecter pour publier un commentaire.
vous avez probablement un canal alpha dans le format png que vous avez besoin de se débarrasser de l'avant d'essayer d'écrire les jpg.
Créer un nouveau BufferedImage avec le type TYPE_INT_RGB (pas TYPE_INT_ARGB), puis écrire votre image source (pngImage) sur la nouvelle image vierge.
Quelque chose comme ceci (attention, pas testé le code):
Il pourrait être plus facile à utiliser
ImageIO
de lire le PNG dans unBufferedImage
et écrire l'image en format JPEG.Addendum: Dans cette approche, la conversion est gérée de manière transparente par l'écrivain
ImageTranscoder
.Je suppse que JAI lit l'image PNG avec une couleur indexée modèle et est seulement capable d'écrire de gris 8 bits ou 24 bits de couleur des images en tant que fichiers JPEG.
Si vous n'êtes pas obligé d'utiliser JAI pour cette tâche, vous devriez être en mesure d'utiliser ImageIO à la place:
J'ai aussi trouvé que la lecture d'une image PNG dans un BufferedImage avec ImageIO (Java 6) et de l'écrire, pour un JPG "format" nom corrompu de l'image. L'image était là, mais les couleurs regardé "solarisé" et presque inversé. Le fichier JPG, beaucoup plus petit que le fichier PNG pour certain, donc beaucoup de compression a été fait. Je ne vois pas comment vous pouvez contrôler la compression ou la profondeur de couleur.
Je recevais le message suivant dans un contexte légèrement différent. Se débarrasser de la couche alpha résolu le problème