Java ImageIO.write返回false

use*_*881 3 java java-io javax.imageio

我想保存一个BufferedImage(名为"result"):

boolean bres = ImageIO.write(result, ".png", new File(saveP)); 
Run Code Online (Sandbox Code Playgroud)

但是布雷斯总是空的.

这个

ImageIO.getWriterFormatNames()
Run Code Online (Sandbox Code Playgroud)

返回:

jpg BMP bmp JPG jpeg wbmp png JPEG PNG WBMP GIF gif
Run Code Online (Sandbox Code Playgroud)

我应该能够保存为png.

并且BufferedImage的类型是"2"

BufferedImage@137695c: type = 2 DirectColorModel: rmask=ff0000 gmask=ff00 bmask=ff amask=ff000000 IntegerInterleavedRaster: width = 720 height = 576 #Bands = 4 xOff = 0 yOff = 0 dataOffset[0] 0
Run Code Online (Sandbox Code Playgroud)

类型2是"ARGB".

为什么我无法保存BufferedImage?

编辑:saveP ="ex000567.png"

sch*_*007 7

private static void savePNG( final BufferedImage image, final String path ){
        try {
            RenderedImage rendImage = image;
            ImageIO.write(rendImage, "PNG", new File(path));
        } catch ( IOException e) {
            e.printStackTrace();
        }
    }
Run Code Online (Sandbox Code Playgroud)

测试此功能.这个对我有用.

重要的变化是第二个参数ImageIO.write将从更改".png""PNG"(小写"png"也可以),请参阅ImageIO.getWriterFormatNames()有效名称的输出.


yer*_*gin 6

对于在使用 JPEG 文件时遇到此问题的任何人,请确保您的缓冲图像没有 Alpha 通道。否则,com.sun.imageio.plugins.jpeg.JPEGImageWriterSpi#canEncodeImage将拒绝您的形象。

例如,而不是BufferedImage.TYPE_INT_ARGB使用BufferedImage.TYPE_INT_RGB或其他没有 Alpha 通道的东西。