Как сохранить файл изображения в 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();
}
}