Arbeiten mit Bildern in Kotlin: Bibliotheken, Werkzeuge und Beispiele

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 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

Empfehlungen