Arbeiten mit Bildern in Kotlin: Überblick über Bibliotheken und praktische Beispiele
Kotlin ist eine moderne Programmiersprache, die auf der JVM läuft. Dank der vollständigen Kompatibilität mit Java können für die Bildverarbeitung alle Standard-Java-Bibliotheken wie javax.imageio, java.awt und javax.swing verwendet werden. In diesem Artikel betrachten wir die grundlegenden Ansätze zur Arbeit mit Bildern in Kotlin: Lesen, Schreiben, Größenänderung, Anwendung von Filtern und Formatkonvertierung.
Erforderliche Bibliotheken
Für die Arbeit mit Bildern in Kotlin (JVM) müssen keine zusätzlichen Abhängigkeiten installiert werden – die Standard-JDK-Bibliothek ist ausreichend. Für komplexere Aufgaben (z. B. Verarbeitung großer Bilder oder Arbeit mit Metadaten) können jedoch externe Bibliotheken erforderlich sein:
- java.awt.image.BufferedImage – die Hauptklasse zur Darstellung eines Bildes im Speicher.
- javax.imageio.ImageIO – Lesen und Schreiben von Bildern in verschiedenen Formaten (PNG, JPEG, BMP, GIF).
- java.awt.Graphics2D – Zeichnen und Transformationen.
- Thumbnailator (optional) – vereinfacht die Größenänderung und Erstellung von Miniaturansichten.
- BoofCV (optional) – Computer-Vision-Bibliothek mit Kotlin-Unterstützung.
Lesen und Schreiben von Bildern
Der einfachste Weg, ein Bild zu laden, ist die Verwendung von ImageIO.read().
import java.awt.image.BufferedImageimport java.io.Fileimport javax.imageio.ImageIO
fun main() { // Bild lesen val inputFile = File("input.jpg") val image: BufferedImage = ImageIO.read(inputFile) ?: throw Exception("Bild konnte nicht geladen werden")
// In einem anderen Format schreiben val outputFile = File("output.png") ImageIO.write(image, "png", outputFile)
println("Bild gespeichert: ${outputFile.absolutePath}")}Größenänderung eines Bildes
Für die Größenänderung verwenden wir Graphics2D mit Anti-Aliasing-Parametern.
import java.awt.Graphics2Dimport java.awt.RenderingHintsimport java.awt.image.BufferedImageimport javax.imageio.ImageIOimport java.io.File
fun resizeImage(inputPath: String, outputPath: String, targetWidth: Int, targetHeight: Int) { val original: BufferedImage = ImageIO.read(File(inputPath)) val resized = BufferedImage(targetWidth, targetHeight, BufferedImage.TYPE_INT_RGB) val g2d: Graphics2D = resized.createGraphics()
// Anti-Aliasing für hochwertige Skalierung aktivieren g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR) g2d.drawImage(original, 0, 0, targetWidth, targetHeight, null) g2d.dispose()
ImageIO.write(resized, "jpg", File(outputPath)) println("Bildgröße geändert: $outputPath")}
fun main() { resizeImage("input.jpg", "resized.jpg", 800, 600)}Anwendung von Filtern (Unschärfe, Kontrast)
Für einfache Effekte kann BufferedImageOp verwendet werden (z. B. ConvolveOp für Unschärfe).
import java.awt.image.BufferedImageimport java.awt.image.ConvolveOpimport java.awt.image.Kernelimport javax.imageio.ImageIOimport java.io.File
fun applyBlur(inputPath: String, outputPath: String) { val image: BufferedImage = ImageIO.read(File(inputPath))
// 5x5 Unschärfe-Kernel val size = 5 val weight = 1.0f / (size * size) val kernelData = FloatArray(size * size) { weight } val kernel = Kernel(size, size, kernelData) val blurOp = ConvolveOp(kernel)
val blurred = blurOp.filter(image, null) ImageIO.write(blurred, "jpg", File(outputPath))}
fun main() { applyBlur("input.jpg", "blurred.jpg")}Formatkonvertierung
Einfaches
Auch in der Bibliothek
Arbeiten mit Kafka in Swift (iOS/macOS): Bibliotheken, Clients und Beispiele
cobra/pflag für Go: Vollständige Anleitung mit Beispielen
Caching in Node.js: Redis, Memcached und integrierter Speicher
Puppeteer für JavaScript (Node.js): Komplettguide mit Beispielen
ESLint + TypeScript Plugins: Vollständige Anleitung mit Beispielen