ImageIO无法将缓冲图像保存到文件。

5

我在写缓冲图像到 jpg 文件时遇到了一些问题。在我的方法中,我将 bufferedimage 作为参数传入,需要将其写入文件。

这是我正在做的:

public boolean writeToFile(BufferedImage buff,String savePath) {

        try {

            System.out.println(buff.toString());
            ImageIO.write(buff, ".jpg", new File(savePath));
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        } 
   }

以下是 buff.toString() 打印的内容:
BufferedImage@8046f4: type = 1 DirectColorModel: rmask=ff0000 gmask=ff00 bmask=ff amask=0 IntegerInterleavedRaster: width = 1024 height = 172 #Bands = 3 xOff = 0 yOff = 0 dataOffset[0] 0

程序正常运行,没有任何异常,但生成的jpg文件大小为0字节

我尝试不使用ImageIO来写入图像:

public boolean writeToFile(BufferedImage buff,String savePath) {



        try {

            System.out.println("got image : " + buff.toString());
            Iterator iter = ImageIO.getImageWritersByFormatName("jpeg");
            ImageWriter writer = (ImageWriter)iter.next();
            ImageWriteParam iwp = writer.getDefaultWriteParam();


            iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
            iwp.setCompressionQuality(.5f); 


            File file = new File(savePath);
            FileImageOutputStream output = new FileImageOutputStream(file);
            writer.setOutput(output);
            IIOImage image = new IIOImage(buff, null, null);
            writer.write(null, image, iwp);
            writer.dispose();

            return true;
        } catch (Exception e) {
             e.printStackTrace();
        }

        return false;
    }

这个完全可以正常工作。

为什么使用ImageIO不起作用?

2个回答

9
从您的格式名称中删除 .
ImageIO.write(buff, "jpg", new File(savePath));

4

信不信由你,只需要将".jpg"改成"jpg",它就能正常工作。

我遇到了同样的问题,但我查看了ImageIO文档,并找到了这个链接


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