# JPG in größe ändern und speichern



## uhlealex (12. Okt 2005)

Hallo zusammen, ich hab folgendes Problem,
ich hab mir eine Methode zum ändern der Größe von Bildern geschrieben, jedoch ist das Bild nach dem ich es gespeichert hab leer oder nur schwarz, wenn ich es mit InfraView öffne. Es werden keine Compiler fehler oder anderes ausgegeben.

Hier mein Source:


```
public boolean Resize(String imgSrc)
    {
        BufferedImage buf1 = null;
        try
        {
          buf1 = ImageIO.read(new File(imgSrc));
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        int width=300, height=300;
        
        Image image = ((Image)buf1).getScaledInstance(width,height,Image.SCALE_FAST);
        
        BufferedImage buf2 = new BufferedImage ( width, height, BufferedImage.TYPE_INT_RGB);
        buf2.createGraphics().drawImage( image, 0 ,0, this);
        
        try
        {
           ImageIO.write(buf2, "jpg", new File(imgSrc));
        }
        catch (IOException ie)
        {
            System.err.println("! IOException:"+ ie.getMessage());
        }
        return false;
    }
```

Wo liegt das Problem ???

Danke


----------



## MPW (18. Okt 2005)

kp, aber lass dir doch mal das Bild in einem Java-Fenster anzeigen, wenn's dort richtig ist, weißt du, das es am speichern liegt...

Ich glaube nicht, das der Fehler innerhalb des geposteten Codes liegt, sondern beim speichern oder so....du solltest z.B. vermeiden, die gleiche Datei zu überschreiben, das gibt immer Probleme in Java.


[offtopic]
Und notfalls nimmst du die Resizefunktion von Irfanview;-)
[/offtopic]


----------



## Grizzly (18. Okt 2005)

So, habe mal den Code etwas formatiert und ein paar Änderungen vorgenommen:

```
package test;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

public class ImageResize {

	public static void main(String[] args) {
		boolean result;
		String path = "C:\\Dokumente und Einstellungen\\grizzly\\Desktop\\";
		
		result = resize(path + "test1.jpg", path + "test2.jpg");
		System.out.println(result);
	}
	
	public static boolean resize(final String srcFile, final String destFile) {
		BufferedImage srcImage, destImage;
		Image image;
		int width = 300;
		int height=300;
		Graphics g;
		
		// Grafik laden.
		try {
			srcImage = ImageIO.read(new File(srcFile));
		} catch (IOException e) {
			e.printStackTrace();
			return false;
		}
		// Grafik skalieren.
		image = srcImage.getScaledInstance(width, height, Image.SCALE_FAST);
		// Grafik zeichen.
		destImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
		g = destImage.createGraphics();
		g.drawImage(image, 0, 0, null);
		g.dispose();
		// Grafik speichern.
		try {
			ImageIO.write(destImage, "jpg", new File(destFile));
		} catch (IOException ie) {
			ie.printStackTrace();
		}
		return true;
	}
}
```
Ich speichere das neue Bild in eine andere Datei. Weiter gebe ich den Grafikkontext mit _g.dispose()_ wieder frei. Den Rest habe ich gleich gelassen. Und es funktioniert wunderbar.


----------



## MPW (19. Okt 2005)

schön!

Wenn du jetzt noch das alte Bild irgendwie vorher löschst, kannst du wahrscheinlich auch das alte gleich überspeichern! bzw. neu anlegen dann...

Dann kannst du noch die args[] auswerten und fertig hast du ein universelles Resizetool!


----------

