Как сохранить файл изображения в Java?

Я разрабатываю приложение для генерации QR-кода в Java. Это генерирующий код,

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) {

                }
             }

Но есть исключение, как,

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)

1 ответ

Там нет причин для использования 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();
    }
}
Другие вопросы по тегам