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 bestimmtUnterstü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:
- \
Auch in der Bibliothek
Arbeiten mit CSV in C# (.NET): Vollständige Anleitung
Arbeit mit S3 und Cloud-Speichern in Node.js: Die Bibliothek @aws-sdk/client-s3
Kryptographie in Swift: Verschlüsselung und Hashing für iOS/macOS