# Bild zuschneiden - Cropping/Cutting/Clipping?



## frankred (27. Mrz 2009)

Hallo Leute,

habe seit nunmehr 2 Tagen ein großes Problem. Ich schaffe es nicht ein hochgeladenes bild (upload) zu beschneiden und danach abzuspeichern. Habe in sachen Java-Grafikbearbeitung leider noch keine erfahrungen gesammelt. Vielleicht könnt ihr mir weiterhelfen, hier der Auszug des Quelltextes.


[HIGHLIGHT="Java"]		BufferedImage cuttetBufferedImage = ImageIO.read(upload);
		File cuttetFile = new File(JNDIUtil.getImagePath() + separator + "cuttet" + separator + filename);

		CropImageFilter cropImage = new CropImageFilter(100, 100, 200, 200);
		Toolkit tk = Toolkit.getDefaultToolkit();
		Image cuttetImage = tk.createImage(new FilteredImageSource(cuttetBufferedImage.getSource(),cropImage));

        Graphics g = cuttetBufferedImage.createGraphics();

        g.drawImage(cuttetImage, cuttetImage.getWidth(null),cuttetImage.getHeight(null), null);
        g.dispose();


        ImageIO.write(cuttetBufferedImage,  "jpg", cuttetFile);[/HIGHLIGHT]

Das erzeugte Bild sieht jedoch sehr seltsam aus. Es zeigt das Hochgeladene und in diesem befindet sich der Ausschnittsbereich (x=100, y=100, breite=200, höhe=200) an einer anderen Stelle. Ich will jedoch nur das ausgeschnitte Bild abspeichern.

Grüßle Franki


----------



## Verjigorm (27. Mrz 2009)

frankred hat gesagt.:


> Graphics g = cuttetBufferedImage.createGraphics();
> 
> g.drawImage(cuttetImage, cuttetImage.getWidth(null),cuttetImage.getHeight(null), null);



Mal überlegt, was du hier machst?
Du zeichnest AUF dein Original dein verkleinertes Bild und speicherst das dann ab.

Du musst doch nur "cuttetImage" speichern.
Das ganze Graphics-Zeug ist unnütz

So müsste es (ungetstet) richtig sein:

```
...
Image cuttetImage = tk.createImage(new FilteredImageSource(cuttetBufferedImage.getSource(  ),cropImage));
//zwischendrin alles weg
ImageIO.write(cuttetImage,  "jpg", cuttetFile);
```


----------



## frankred (28. Mrz 2009)

mann kann nur ein BufferdImage schreiben kein normales Image. 

Image cuttetImage = tk.createImage(new FilteredImageSource(cuttetBufferedImage.getSource(  ),cropImage));
//zwischendrin alles weg
ImageIO.write(cuttetImage,  "jpg", cuttetFile);

sowas wird also nicht funktionieren. habe es jetzt anders gelöst ohne cropfilter oder ähnliches:

Auf ein BufferedImage kann man direkt die Funktion  subimage(topLeftX,topLeftY, breite, höhe) ausführen. So klappts. Trotzdem danke für deine Hilfe


----------



## Verjigorm (30. Mrz 2009)

Ich gebe zu, ich habe mir dein Posting nicht komplett angeschaut, nur die Stelle, an der du sagst, dass du "Bild auf Bild" zeichnest 
Was du sonst so machst, ist mir entgangen. Das mit dem Subimage hatte ich für mich selbst vorausgesetzt

Memo an mich: 
Komplettes Posting lesen


----------

