画像を“名前を付けて保存する”。
今回はJavaで画像(BufferedImage)を保存ダイアログを開いて保存する方法を書く。
(同じ名前で拡張子の異なるファイルを保存する方法も書いたJavaでJFileChooserで画像を開き、名前を付けて画像を保存する。 - 生物屋さんのためのゼロからのプログラミング)
まずは全体のコードを示す。
import java.awt.BorderLayout; import java.awt.FileDialog; import java.awt.Frame; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; public class ImageSave extends JFrame implements ActionListener { BufferedImage img; MyPanel mypane; int h; int w; //画像を開く public void OpenImage () { try { File openFile = new File ("開く画像ファイル"); img = ImageIO.read(openFile); h = img.getHeight(); w = img.getWidth(); } catch (IOException ex) { System.out.println("Miss"); } //画像をフレームに貼る JFrame imgFrame = new JFrame("Open Image"); imgFrame.setBounds (300, 100, 520, 410); imgFrame.setVisible(true); mypane = new MyPanel (520, 410); imgFrame.getContentPane().add(mypane, BorderLayout.CENTER); } //画像を貼る用のツール public class MyPanel extends JPanel { public MyPanel (int width, int height) { setSize (width, height); } public void paintComponent (Graphics g) { g.drawImage(img, 0, 0, this); } } //画像を保存する public void SaveImage () { BufferedImage saveImg = new BufferedImage (w, h, BufferedImage.TYPE_INT_RGB); Graphics saveg = saveImg.getGraphics(); saveg.drawImage(img, 0, 0, null); saveg.dispose(); try { FileOutputStream fo = new FileOutputStream (this.writeFile()); ImageIO.write(img, "png", fo); } catch (IOException ex) { System.out.println("Miss"); } } //出力画像の名前書き String writeFile () { FileDialog fd = new FileDialog (new Frame (), "保存", FileDialog.SAVE); fd.setVisible(true); String fullpath = fd.getDirectory() + fd.getFile(); fd.dispose(); return fullpath; } public void actionPerformed (ActionEvent e) { String cmd = e.getActionCommand(); if (cmd.equals("open")) { OpenImage(); } else if (cmd.equals ("save")) { SaveImage(); } } ImageSave (String title) { setTitle(title); setBounds (10, 10, 240, 80); setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); JButton button = new JButton ("Open"); JButton button1 = new JButton ("Save"); button.addActionListener (this); button1.addActionListener (this); button.setActionCommand("open"); button1.setActionCommand("save"); button.setBounds(70, 10, 100, 30); button1.setBounds (70, 50, 100, 30); JPanel pane = new JPanel (); pane.add(button); pane.add(button1); getContentPane().add(pane, BorderLayout.CENTER); } public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ ImageSave frame = new ImageSave("Image Save"); frame.setVisible (true); } }
今回は簡単のために、開いた画像をそのまま名前を付けて保存する方法を書いた。
基本的なダイアログを用いた保存方法は、ほかのファイルの保存方法と一緒のようだ。