Arbeiten mit Bildern in Java: Vom Lesen bis zur Verarbeitung

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: Bibliotheken und praktische Beispiele



Java bietet leistungsstarke integrierte Werkzeuge für die Arbeit mit Rasterbildern. In diesem Artikel betrachten wir die Standardbibliothek javax.imageio, das Paket java.awt.image und die beliebte Drittanbieter-Bibliothek Thumbnailator. Sie erfahren, wie Sie Bilder lesen, speichern, skalieren, Filter anwenden und Formate konvertieren.



1. Grundlagen: Paket javax.imageio und BufferedImage



Die zentrale Klasse zur Darstellung eines Bildes im Speicher ist BufferedImage. Sie ermöglicht das Abrufen und Ändern von Pixeln, die Arbeit mit verschiedenen Farbmodellen (RGB, ARGB) und Datentypen.



Bild aus einer Datei lesen



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

public class ImageReadExample { public static void main(String[] args) { try { File inputFile = new File("input.jpg"); BufferedImage image = ImageIO.read(inputFile); System.out.println("Breite: " + image.getWidth()); System.out.println("Höhe: " + image.getHeight()); System.out.println("Typ: " + image.getType()); } catch (IOException e) { e.printStackTrace(); } }}


Bild in eine Datei schreiben



File outputFile = new File("output.png");ImageIO.write(image, "png", outputFile); // Format wird durch die Erweiterung bestimmt


Unterstützte Formate: JPEG, PNG, BMP, WBMP, GIF (nur Lesen). Eine vollständige Liste erhalten Sie über ImageIO.getReaderFormatNames().



2. Skalierung und Transformationen mit Java 2D



Das Paket java.awt.Graphics2D ermöglicht hochwertige Skalierung, Drehung, Spiegelung und Überlagerung von Bildern.



Skalierung unter Beibehaltung der Proportionen



import java.awt.Graphics2D;import java.awt.RenderingHints;import java.awt.image.BufferedImage;

public class ImageResizer { public static BufferedImage resize(BufferedImage original, int targetWidth, int targetHeight) { BufferedImage resized = new BufferedImage(targetWidth, targetHeight, original.getType()); Graphics2D g2d = resized.createGraphics(); // Anti-Aliasing für bessere Qualität aktivieren 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; }}


Bild um 90 Grad drehen



public static BufferedImage rotate(BufferedImage image, double angleDegrees) {    double radians = Math.toRadians(angleDegrees);    int w = image.getWidth();    int h = image.getHeight();        // Neue Größe nach der Drehung    int newW = (int) Math.abs(w * Math.cos(radians)) + (int) Math.abs(h * Math.sin(radians));    int newH = (int) Math.abs(h * Math.cos(radians)) + (int) Math.abs(w * Math.sin(radians));        BufferedImage rotated = new BufferedImage(newW, newH, BufferedImage.TYPE_INT_ARGB);    Graphics2D g2d = rotated.createGraphics();    g2d.translate((newW - w) / 2.0, (newH - h) / 2.0);    g2d.rotate(radians, w / 2.0, h / 2.0);    g2d.drawImage(image, 0, 0, null);    g2d.dispose();    return rotated;}


3. Anwendung von Filtern: Weichzeichnung, Kontrast, Helligkeit



Verwenden Sie für die Filterung BufferedImageOp (aus dem Paket java.awt.image). Die nützlichsten Implementierungen sind:



    \

Empfehlungen