Как сохранить изображение, выбранное пользователем, и сохранить его в папку на рабочем столе

Я хотел бы знать, как сохранить изображение, которое пользователь выбрал ранее. Я знаю только, как разрешить пользователю выбирать изображение.

Это мой текущий код, который у меня есть.

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
        JFileChooser chooser = new JFileChooser();
        chooser.showOpenDialog(null);
        File f = chooser.getSelectedFile();
        // String filename = f.getAbsolutePath();
        //jTextField1.setText(filename);
        try {
            ImageIcon ii=new ImageIcon(scaleImage(120, 120, ImageIO.read(new File(f.getAbsolutePath()))));//get the image from file chooser and scale it to match JLabel size
            jLabel3.setIcon(ii);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public static BufferedImage scaleImage(int w, int h, BufferedImage img) throws Exception {
        BufferedImage bi;
        bi = new BufferedImage(w, h, BufferedImage.TRANSLUCENT);
        Graphics2D g2d = (Graphics2D) bi.createGraphics();
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g2d.addRenderingHints(new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY));
        g2d.drawImage(img, 0, 0, w, h, null);
        g2d.dispose();
        return bi;
    }

person CodeName    schedule 02.02.2015    source источник
comment
См.: stackoverflow. ком/вопросы/12674064/   -  person colti    schedule 02.02.2015


Ответы (1)


Попробуйте этот код:

BufferedImage img = ...; 
String location = ...; 
String format = ...; // "PNG" for example
ImageIO.write(img, format, new File(location));
person Hele    schedule 02.02.2015
comment
Лучше использовать исходные байты файла изображения. Использование ImageIO часто меняет размер (файла) изображения, а если JPEG, то, скорее всего, сохранит его с другим уровнем сжатия/качества. - person Andrew Thompson; 02.02.2015
comment
Не усложнит ли использование потоков для этой задачи? - person Hele; 02.02.2015
comment
Определите «много». Кстати, вы пытались изменить сжатие JPEG? Это не ракетостроение, но недалеко от него. Ознакомьтесь с методом getJpegCompressedImage(BufferedImage image) в этом ответе. И обратите внимание, что в ImageIO нет возможности узнать, какое сжатие/качество использовалось в исходном изображении. - person Andrew Thompson; 02.02.2015
comment
Разве это не ракетостроение? Да, верно. Я собираюсь сделать обоснованное предположение, что ОП не хочет иметь ничего общего со сжатием изображений = P - person Hele; 03.02.2015
comment
Большое спасибо! - person CodeName; 06.06.2016