Arbeiten mit Bildern in Kotlin: Überblick über Bibliotheken und praktische Beispiele
Kotlin ist eine moderne Multiplattform-Sprache, die aktiv für die Entwicklung unter JVM (Desktop), Android sowie in Backend- und Multiplattform-Projekten (KMP) eingesetzt wird. Die Arbeit mit Bildern ist eine häufige Aufgabe, und im Kotlin-Ökosystem gibt es mehrere Ansätze: von der Nutzung standardmäßiger Java-Bibliotheken bis hin zu spezialisierten Lösungen für Android und Kotlin Multiplatform. In diesem Artikel betrachten wir die wichtigsten Bibliotheken und Werkzeuge, zeigen Codebeispiele und geben praktische Empfehlungen.
1. Integrierte Mittel: AWT (Java Desktop / JVM)
Für Desktop-Anwendungen auf der JVM (z. B. mit JavaFX oder Swing) ist es am einfachsten, die Standardpakete java.awt und javax.imageio zu verwenden. Diese Bibliotheken sind „von Haus aus“ verfügbar und ermöglichen das Laden, Ändern der Größe, Konvertieren von Formaten und Zeichnen auf Bildern.
Beispiel: Laden, Größenänderung und Speichern
import java.awt.image.BufferedImageimport java.io.Fileimport javax.imageio.ImageIO
fun resizeImage(inputPath: String, outputPath: String, newWidth: Int, newHeight: Int) { val original: BufferedImage = ImageIO.read(File(inputPath)) val resized = BufferedImage(newWidth, newHeight, original.type) val g = resized.createGraphics() g.drawImage(original, 0, 0, newWidth, newHeight, null) g.dispose() ImageIO.write(resized, "jpg", File(outputPath)) println("Bild gespeichert: $outputPath")}
fun main() { resizeImage("input.jpg", "output.jpg", 800, 600)}Für Drehung, das Aufbringen von Wasserzeichen oder Zuschneiden können die Methoden von Graphics2D und affine Transformationen verwendet werden.
2. Android: Bitmap und BitmapFactory
In der Android-Entwicklung mit Kotlin sind die Klasse android.graphics.Bitmap und die Hilfsprogramme BitmapFactory die Grundlage für die Arbeit mit Bildern. Sie ermöglichen das Laden von Bildern aus Ressourcen, Dateien oder dem Netzwerk sowie die grundlegende Bearbeitung.
Beispiel: Laden aus Ressourcen und Größenänderung (Android)
import android.graphics.Bitmapimport android.graphics.BitmapFactoryimport android.graphics.Matriximport java.io.ByteArrayOutputStream
fun scaleBitmap(bitmap: Bitmap, maxSize: Int): Bitmap { val width = bitmap.width val height = bitmap.height val scale = if (width > height) maxSize.toFloat() / width else maxSize.toFloat() / height val matrix = Matrix() matrix.postScale(scale, scale) return Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true)}
fun bitmapToByteArray(bitmap: Bitmap, quality: Int = 90): ByteArray { val stream = ByteArrayOutputStream() bitmap.compress(Bitmap.CompressFormat.JPEG, quality, stream) return stream.toByteArray()}Für komplexere Bearbeitungen (Filter, Effekte) können android.renderscript (veraltet in API 31) oder die Bibliothek OpenCV Android verwendet werden.
3. Kotlin Multiplatform (KMP): Bibliothek KVision oder eigene Lösungen
In Multiplattform-Projekten gibt es keinen einheitlichen Standard für die Arbeit mit Bildern. Häufig werden verwendet:
- KVision – ein Framework für Webanwendungen in Kotlin/JS, mit integrierter Unterstützung für die Arbeit mit Canvas und ImageData.
- Okio + ImageIO (JVM) / Bitmap (Android) – für KMP werden oft
expect/actual-Wrapper geschrieben, bei denen auf jeder Plattform eine eigene Implementierung verwendet wird. - Skiko – eine Bibliothek von JetBrains für die Arbeit mit Grafik (Skia), verfügbar auf JVM, JS und Native. Ermöglicht das Laden, Zeichnen und Exportieren von Bildern.
Beispiel für expect/actual in KMP:
// commonMainexpect fun loadImageBytes(path: String): ByteArray
// androidMainactual fun load Auch in der Bibliothek
Arbeiten mit ZIP/Archiven in Java: java.util.zip und Zip4j
GraphQL Java: Ein leistungsstarkes Werkzeug zur Erstellung moderner APIs in Java
Qt für C++: Vollständiger Leitfaden mit Beispielen
gRPC für Swift (iOS/macOS): Bibliotheken, Einrichtung und Beispiele