Java Image I/O API: resize und crop von Bildern | Leitfaden

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Arbeiten mit Bildern in Java: Größenänderung (resize) und Zuschneiden (crop)



In der modernen Web- und Desktop-Entwicklung mit Java besteht häufig die Notwendigkeit, Bilder programmatisch zu verarbeiten: sie für Vorschaubilder zu verkleinern, überflüssige Ränder zu beschneiden oder an bestimmte Proportionen anzupassen. In der Standardbibliothek von Java (Java SE) gibt es keine einzelne hochrangige Klasse für diese Operationen, aber es existiert ein leistungsstarker Satz von Werkzeugen in den Paketen java.awt, java.awt.image und javax.imageio. In diesem Artikel werden wir detailliert besprechen, wie man die Operationen resize (Größenänderung) und crop (Zuschneiden) mit den integrierten Java-Mitteln durchführt.



Wichtige Klassen für die Bildbearbeitung



Bevor wir mit dem Code beginnen, lernen wir die wichtigsten Klassen kennen:

  • javax.imageio.ImageIO – Lesen und Schreiben von Bildern (unterstützt PNG, JPEG, BMP, GIF u. a.).
  • java.awt.image.BufferedImage – Rasterbild mit Zugriff auf Pixel.
  • java.awt.Graphics2D – Klasse zum Zeichnen (Skalieren, Zuschneiden, Überlagern).
  • java.awt.geom.AffineTransform – Transformationsmatrix für präzise Skalierung.


1. Größenänderung eines Bildes (Resize)



Die gängigste Methode besteht darin, das Originalbild auf eine neue Leinwand mit den gewünschten Abmessungen neu zu zeichnen. Verwenden Sie für ein qualitativ hochwertiges Ergebnis RenderingHints.



import javax.imageio.ImageIO;import java.awt.*;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;

public class ImageResizer {

public static BufferedImage resize(BufferedImage original, int targetWidth, int targetHeight) { BufferedImage resized = new BufferedImage(targetWidth, targetHeight, BufferedImage.TYPE_INT_RGB); Graphics2D g2d = resized.createGraphics();

// Einstellung der Skalierungsqualität g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

g2d.drawImage(original, 0, 0, targetWidth, targetHeight, null); g2d.dispose(); return resized; }

public static void main(String[] args) throws IOException { File input = new File("input.jpg"); BufferedImage source = ImageIO.read(input);

// Verkleinern auf 300x200 BufferedImage output = resize(source, 300, 200); ImageIO.write(output, "jpg", new File("resized.jpg")); System.out.println("Resize abgeschlossen!"); }}


Wichtige Hinweise:

  • Wenn Sie RenderingHints nicht setzen, ist das Ergebnis von geringer Qualität (Nachbarpixel).
  • Verwenden Sie für PNG mit Transparenz BufferedImage.TYPE_INT_ARGB.
  • Die Proportionen werden nicht automatisch beibehalten – berechnen Sie bei Bedarf das Seitenverhältnis manuell.


2. Beibehaltung der Proportionen (Aspect Ratio)



Um das Bild nicht zu verzerren, berechnen Sie die neue Größe unter Beibehaltung der Proportionen:



public static BufferedImage resizeKeepRatio(BufferedImage original, int maxWidth, int maxHeight) {    int origWidth = original.getWidth();    int origHeight = original.getHeight();

double widthRatio = (double) maxWidth / origWidth; double heightRatio = (double) maxHeight / origHeight; double ratio = Math.min(widthRatio, heightRatio);

int newWidth = (int) (origWidth * ratio); int newHeight = (int) (origHeight * ratio);

return resize(original, newWidth, newHeight);}


3. Zuschneiden eines Bildes (Crop)



Das Zuschneiden in Java erfolgt mit der Methode getSubi

Empfehlungen