java - ImageIO no puede escribir un archivo JPEG
javax.imageio (3)
Obtienes el mismo error
Caused by: javax.imageio.IIOException: Invalid argument to native writeImage
at com.sun.imageio.plugins.jpeg.JPEGImageWriter.writeImage(Native Method)
at com.sun.imageio.plugins.jpeg.JPEGImageWriter.writeOnThread(JPEGImageWriter.java:1055)
si está utilizando un espacio de color no admitido (en mi caso CYMK). Ver ¿Cómo convertir de CMYK a RGB en Java correctamente? cómo resolver esto
Tengo una Imagen Buffered Estoy tratando de escribir en un archivo jpeg, pero mi programa Java arroja una excepción. Puedo guardar con éxito el mismo buffer en un gif y png. Intenté buscar soluciones en Google, pero fue en vano.
Código:
File outputfile = new File("tiles/" + row + ":" + col + ".jpg");
try {
ImageIO.write(mapBufferTiles[row][col], "jpg", outputfile);
} catch (IOException e) {
outputfile.delete();
throw new RuntimeException(e);
}
Excepción:
Exception in thread "main" java.lang.RuntimeException: javax.imageio.IIOException: Invalid argument to native writeImage
at MapServer.initMapBuffer(MapServer.java:90)
at MapServer.<init>(MapServer.java:24)
at MapServer.main(MapServer.java:118)
Caused by: javax.imageio.IIOException: Invalid argument to native writeImage
at com.sun.imageio.plugins.jpeg.JPEGImageWriter.writeImage(Native Method)
at com.sun.imageio.plugins.jpeg.JPEGImageWriter.writeOnThread(JPEGImageWriter.java:1055)
at com.sun.imageio.plugins.jpeg.JPEGImageWriter.write(JPEGImageWriter.java:357)
at javax.imageio.ImageWriter.write(ImageWriter.java:615)
at javax.imageio.ImageIO.doWrite(ImageIO.java:1602)
at javax.imageio.ImageIO.write(ImageIO.java:1526)
at MapServer.initMapBuffer(MapServer.java:87)
... 2 more
OpenJDK no tiene un codificador JPEG nativo, intente utilizar Sun''s JDK o usar una biblioteca (como JAI
AFAIK, con respecto al "tinte rosado", Java guarda el JPEG como ARGB (aún con información de transparencia). La mayoría de los espectadores, al abrir, asumen que los cuatro canales deben corresponder a un CMYK (no ARGB) y, por lo tanto, al tono rojo.
Si vuelve a importar la imagen a Java, la transparencia aún está allí.
Tuve el mismo problema en OpenJDK 7 y logré imageType
esta excepción al usar un imageType
de TYPE_3BYTE_BGR
lugar de TYPE_4BYTE_ABGR
usando el mismo OpenJDK.