java - java中如何保存图像文件?

标签 java javax.imageio save-image

我正在用java开发一个QR生成器应用程序。这是生成代码,

try {

            ByteArrayOutputStream out = QRCode.from(txt_input.getText()).to(ImageType.PNG).stream();
            ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());

            BufferedImage image = ImageIO.read(in);

            lbl_output.setIcon(null);
            lbl_output.setIcon(new ImageIcon(image));

            String pic = "image";

        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, " Please enter valid text !");
        }

生成QR图像后,我需要保存它。所以我使用了这段代码,

JFileChooser save = new JFileChooser();
int response = save.showSaveDialog(null);

            if (response == JFileChooser.APPROVE_OPTION) {
               try {
                    File fileToSave = new File(pic + ".png");
                    ImageIO.write(image, "PNG", fileToSave);

                } catch (Exception e) {

                }
             }

但是有一个异常(exception),例如,

java.lang.IllegalArgumentException: image == null!
    at javax.imageio.ImageTypeSpecifier.createFromRenderedImage(ImageTypeSpecifier.java:925)
    at javax.imageio.ImageIO.getWriter(ImageIO.java:1591)
    at javax.imageio.ImageIO.write(ImageIO.java:1520)

最佳答案

这里没有理由使用ImageIO,因为您的QRCode类已经将PNG格式的图像写入字节数组。

相反,只需将字节复制到您想要的文件即可。

即:

ByteArrayOutputStream out = QRCode.from(txt_input.getText()).to(ImageType.PNG).stream();
byte[] bytes = out.toByteArray();

...

FileChooser save = new JFileChooser();
int response = save.showSaveDialog(null);

if (response == JFileChooser.APPROVE_OPTION) {
    File fileToSave = new File(pic + ".png");

    // Try-with-resource
    try (OutputStream out = new FileOutputStream(fileToSave)) {
        out.write(bytes);
        out.flush();
    }
}

关于java - java中如何保存图像文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29588433/

相关文章:

java - 重写标准 Spring MVC 异常的处理行为

java - 为什么 HashSet 在 Java 8 和 Java 9+ 中表现不同?

java - 计算降序数?

java - 更新捆绑的资源文件

html - 无效的 PNG 图像文件 : iDOT doesn't point to valid IDAT chunk

java - 将 BufferedImage 保存为 JPG 时数据已更改,但可以使用 PNG

java - 使用不带 BufferedImage 的 PNGJ 读取 PNG 像素

java - ImageIO.read() 是异步的吗?

node.js - Nodejs 调整大小并从远程服务器保存图像

javascript - 如何使用 angularjs 从 url 下载(保存)图像到我们的相册中?