Bild zuschneiden - Cropping/Cutting/Clipping?

Status
Nicht offen für weitere Antworten.

frankred

Mitglied
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
 
Zuletzt bearbeitet von einem Moderator:
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:
Code:
...
Image cuttetImage = tk.createImage(new FilteredImageSource(cuttetBufferedImage.getSource(  ),cropImage));
//zwischendrin alles weg
ImageIO.write(cuttetImage,  "jpg", cuttetFile);
 
Zuletzt bearbeitet:
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
 
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 😀
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben