Arbeiten mit Bildern in Java: Bibliotheken, Werkzeuge und Codebeispiele
Java bietet leistungsstarke integrierte Werkzeuge für die Arbeit mit Grafiken sowie ein reichhaltiges Ökosystem an Drittanbieter-Bibliotheken. In diesem Artikel betrachten wir die grundlegenden Methoden zum Laden, Verarbeiten, Umwandeln und Speichern von Bildern in Java – von den Standardklassen javax.imageio und java.awt bis hin zu beliebten Bibliotheken, die die Arbeit des Entwicklers vereinfachen.
1. Standardwerkzeuge: javax.imageio und java.awt.image
Die grundlegende Arbeit mit Rasterbildern in Java basiert auf dem Paket javax.imageio (Laden/Speichern) und java.awt.image (Arbeit mit Pixeln). Die Hauptklasse ist BufferedImage, die das Bild im Arbeitsspeicher speichert.
Laden und Speichern eines Bildes
import javax.imageio.ImageIO;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;
public class ImageExample { public static void main(String[] args) throws IOException { // Laden eines Bildes aus einer Datei BufferedImage image = ImageIO.read(new File("input.jpg")); System.out.println("Breite: " + image.getWidth() + ", Höhe: " + image.getHeight());
// Speichern in einem anderen Format ImageIO.write(image, "png", new File("output.png")); }}ImageIO unterstützt die Formate: JPEG, PNG, BMP, WBMP, GIF (nur Lesen). Verwenden Sie ImageIO-Plugins (z. B. TwelveMonkeys), um die Liste der Formate zu erweitern.
Größenänderung (manuelle Methode)
import java.awt.Graphics2D;import java.awt.RenderingHints;import java.awt.image.BufferedImage;
public static BufferedImage resize(BufferedImage original, int newWidth, int newHeight) { BufferedImage resized = new BufferedImage(newWidth, newHeight, original.getType()); Graphics2D g2d = resized.createGraphics(); g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); g2d.drawImage(original, 0, 0, newWidth, newHeight, null); g2d.dispose(); return resized;}2. Java 2D API: Zeichnen und Filter
Die Klasse Graphics2D ermöglicht nicht nur das Skalieren, sondern auch das Anwenden von Effekten, Drehen, Zuschneiden von Bildern sowie das Hinzufügen von Text und geometrischen Formen.
Hinzufügen eines Wasserzeichens
public static BufferedImage addWatermark(BufferedImage source, String text) { BufferedImage result = new BufferedImage(source.getWidth(), source.getHeight(), source.getType()); Graphics2D g2d = result.createGraphics(); g2d.drawImage(source, 0, 0, null); g2d.setColor(new Color(255, 255, 255, 128)); g2d.setFont(new Font("Arial", Font.BOLD, 40)); g2d.drawString(text, 20, source.getHeight() - 20); g2d.dispose(); return result;}Anwenden eines Farbfilters (Sepia)
public static BufferedImage applySepia(BufferedImage img) { int width = img.getWidth(); int height = img.getHeight(); BufferedImage sepia = new BufferedImage(width, height, img.getType());
for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { int rgb = img.getRGB(x, y); int r = (rgb >> 16) & 0xFF; int g = (rgb >> 8) & 0xFF; int b = rgb & 0xFF;
int newR = (int) (0.393 * r + 0.769 * g + 0.189 * b); int newG = (int) (0.349 * r + 0.686 * g + 0.168 * b); int newB = (int) (0.272 * r + 0.534 * g + 0.131 * b);
newR = Math.min(255, newR); newG = Math.min(255, newG); newB = Math.min(255, newB);
int newPixel = (0xFF << 24) | (newR << 16) | (newG << 8) | newB; sepia.setRGB(x, y, newPixel); } } return sepia;}