Java ImageIO.write 返回 false

7

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

boolean bres = ImageIO.write(result, ".png", new File(saveP)); 

但是bres始终为null。
这个。
ImageIO.getWriterFormatNames()

返回:

jpg BMP bmp JPG jpeg wbmp png JPEG PNG WBMP GIF gif

我应该能够保存为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

第二种类型是“ARGB”。

为什么我无法保存BufferedImage?

编辑:saveP =“ex000567.png”


你能提供结果的详细信息并保存P和将.png更改为png吗? - Kick
结果的所有细节都在对象“BufferedImage@137695c”上。 - user3363881
3个回答

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

测试这个函数。它对我有效。

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


图片格式问题 - Kick

6

如果您在使用JPEG文件时遇到此问题,请确保您的缓冲图像没有alpha通道。否则,com.sun.imageio.plugins.jpeg.JPEGImageWriterSpi#canEncodeImage将拒绝您的图像。

例如,不要使用BufferedImage.TYPE_INT_ARGB,而是使用BufferedImage.TYPE_INT_RGB或其他没有alpha通道的类型。


1
这真是让我疯狂了。谢谢。 - undefined

2

FormateName 应该是 "png" 而不是 ".png"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接