java image jpeg javax.imageio

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.