小编典典

ImageIO无法写入JPEG文件

java

我正在尝试将BufferedImage写入jpeg文件,但是我的Java程序引发了异常。我能够成功将相同的缓冲区保存为gif和png。我尝试在Google上四处寻找解决方案,但无济于事。

码:

   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);
   }

例外:

 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

阅读 1031

收藏
2020-09-16

共1个答案

小编典典

OpenJDK没有本地JPEG编码器,请尝试使用Sun的JDK或使用库(例如JAI)

AFAIK,关于“粉红色色调”,Java将JPEG保存为ARGB(仍然具有透明度信息)。大多数观看者在打开时都假定四个通道必须对应于CMYK(而不是ARGB),因此对应于红色。

但是,如果将图像导入回Java,则透明度仍然存在。

2020-09-16