# Bilder speichern



## moemaster (11. November 2008)

Hallo Leute,

folgendes Problem: ich habe ein kleines Programm geschrieben, mit dem man Bilder laden kann, welche dann in verschiedenen Größen auf JLabels angezeigt werden. Nun möchte ich gerne diese veränderten Bilder per Button speichern. Um nochmal zu verdeutlich worauf ich hinaus will:
-ich lade ein Bild
-das Bild wird einmal in Originalgröße und dann noch einmal in 3 anderen Größen angezeigt
-per Buttondruck möchte ich nun, dass diese 3 Bilder gespeichert werden


```
package de.bonprix.development.image_size;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;

import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageWriteParam;
import javax.imageio.ImageWriter;
import javax.imageio.stream.FileImageOutputStream;
import javax.swing.BorderFactory;
import javax.swing.ButtonModel;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.ScrollPaneConstants;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class Main {
	
	javax.swing.JFrame frame1 = new JFrame("Moes' Images-Changer :o) (C)");//$NON-NLS-1$
	
	JPanel panel1 = new JPanel();
	
	JButton btnBrowse = new JButton();
	JButton btnChangeSize = new JButton();
	JButton btnClose = new JButton();
	JButton btnReset = new JButton();
	
	Image img=Toolkit.getDefaultToolkit().getImage("Images/ICON.png");//$NON-NLS-1$
	
	JLabel label1 = new JLabel();
	JLabel label2 = new JLabel();
	JLabel label3 = new JLabel();
	JLabel label4 = new JLabel();
	
	JTextField tfield1 = new JTextField();
	
	BufferedImage currentImage;
	
	Icon BTNBROWSE = new ImageIcon("Images/BTNBROWSE.png");			//$NON-NLS-1$
	Icon BTNCHANGESIZE = new ImageIcon("Images/BTNCHANGESIZE.png");	//$NON-NLS-1$
	Icon BTNCLOSE = new ImageIcon("Images/BTNCLOSE.png"); 			//$NON-NLS-1$
	Icon BTNRESET = new ImageIcon("Images/BTNRESET.png"); 			//$NON-NLS-1$
	
	@SuppressWarnings("unqualified-field-access")
	public Main()
	{
		frame1.add(panel1);
		frame1.setSize(600,600);
		frame1.setVisible(true);
		frame1.setIconImage(img);
		frame1.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(final WindowEvent e)
			{
				System.exit(0);
			}
		}
		)
		;
		
		panel1.setLayout(null);
		panel1.setBounds(0,0,800,600);
		panel1.setVisible(true);
		panel1.add(label1);
		panel1.add(label2);
		panel1.add(label3);
		panel1.add(label4);
		panel1.add(tfield1);
		panel1.add(btnBrowse);
		panel1.add(btnChangeSize);
		panel1.add(btnClose);
		panel1.add(btnReset);
		panel1.setBackground(Color.WHITE);
		final JScrollPane sp = new JScrollPane(label1);
		sp.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
		sp.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
		sp.setPreferredSize(new Dimension(350, 250));
		sp.setVisible(true);
		label1.setBorder(BorderFactory.createEtchedBorder());
		sp.setBounds(10,60,350, 350);
		panel1.add(sp);
		
		label2.setVisible(true);
		label2.setBounds(635,60,48,48);
		label2.setBorder(BorderFactory.createEtchedBorder());
		
		label3.setVisible(true);
		label3.setBounds(587,116,96,96);
		label3.setBorder(BorderFactory.createEtchedBorder());
		
		label4.setVisible(true);
		label4.setBounds(540,220,144,144);
		label4.setBorder(BorderFactory.createEtchedBorder());
		
		btnReset.setVisible(true);
		btnReset.setBounds(370,376,148,32);
		btnReset.setIcon(BTNRESET);
		btnReset.setText("Zurücksetzen");							//$NON-NLS-1$	
		
		btnClose.setVisible(true);
		btnClose.setBounds(555,375,120,32);
		btnClose.setIcon(BTNCLOSE);
		btnClose.setText("Beenden");								//$NON-NLS-1$
		btnClose.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				System.exit(0);
			}
		}
		)
		;
		
		frame1.setBounds(0,0,700,450);
		frame1.setVisible(true);
		
		tfield1.setEditable(false); 
		tfield1.setBounds(380,10,290,32);
		tfield1.setForeground(Color.RED);

		btnChangeSize.setVisible(true);
		btnChangeSize.setBounds(210,10,150,32);
		btnChangeSize.setIcon(BTNCHANGESIZE);
		btnChangeSize.setText("Größe ändern");						//$NON-NLS-1$
				
		btnBrowse.setVisible(true);
		btnBrowse.setBounds(10,10,110,32);
		btnBrowse.setIcon(BTNBROWSE);
		btnBrowse.setText("Öffnen");								//$NON-NLS-1$
		btnBrowse.addActionListener(new ActionListener()
		{
		@SuppressWarnings("nls")
			public void actionPerformed(ActionEvent ae)
			{
				JFileChooser fileChooser=new JFileChooser(".");
				javax.swing.filechooser.FileFilter filter = null;
				fileChooser.addChoosableFileFilter(filter);
				int choice=fileChooser.showOpenDialog(null);
				
				if(choice==JFileChooser.APPROVE_OPTION)
				{
					File file=fileChooser.getSelectedFile();
					tfield1.setText(file.getPath());
					
					Image originalImage = Toolkit.getDefaultToolkit().getImage(file.getPath());

					Image resizedImage1 = originalImage.getScaledInstance(label2.getWidth(), label2.getHeight(), Image.SCALE_DEFAULT);
					Image resizedImage2 = originalImage.getScaledInstance(label3.getWidth(), label3.getHeight(), Image.SCALE_DEFAULT);
					Image resizedImage3 = originalImage.getScaledInstance(label4.getWidth(), label4.getHeight(), Image.SCALE_DEFAULT);
				
					label1.setIcon(new ImageIcon(originalImage));
					label2.setIcon(new ImageIcon(resizedImage1));
					label3.setIcon(new ImageIcon(resizedImage2));
					label4.setIcon(new ImageIcon(resizedImage3));
					
					
				}
			}
		}
		)
		;
	}
		
	
	protected void paint(Graphics graphics) {
		// TODO Auto-generated method stub
		
	}


	public static void main (String[] args) throws Exception 
	{
		@SuppressWarnings({"unused","unused"}) 
		Main main = new Main ();
	}
	
}
```

ich wäre euch sehr dankbar, wenn ihr mir da weiterhelfen könntet. 

Danke im Vorraus


----------



## Billie (11. November 2008)

Javainsel 7 / Kapitel: 16.6 Bilder.

Dort gibt es auch einen Unterpunkt "Schreiben mit ImageIO".


----------



## moemaster (11. November 2008)

Danke für die schnelle Antwort, aber leider ist das nicht das, was ich suche... Ich möchte etwas ,was sozusagen erkennt, dass auf den 3 Labels Bilder liegen und diese dann abspeichert. Das Bild auf dem ersten Label soll dann z.B. mit der Bezeichnung img48x48.jpg, das zweite Bild unter img96x96.jpg, usw, abgespeichert werden. Ich hoffe ich habe mich einigermaßen verständlich ausgedrückt


----------



## CosmoKey (11. November 2008)

wie wäre es, wenn du dir ein BufferedImage erstellst mit dem icon des Labels.

dann holst du die die größe des Labels mit getBounds

und skalierst das bufferedimage mit getScaledInstance

das neue bild kannst du dann abspeicher.


----------

