Arbeiten mit Bildern in Kotlin: resize und crop mit der Bibliothek Kamel
\n\nIn der modernen Entwicklung für Android und plattformübergreifende Projekte mit Kotlin besteht häufig die Notwendigkeit, Bilder programmatisch in der Größe zu ändern (resize) und zuzuschneiden (crop). Dies wird benötigt, um das Laden zu optimieren, Vorschaubilder zu erstellen, sie an verschiedene Bildschirme anzupassen oder Bilder für den Versand an einen Server vorzubereiten. In diesem Artikel betrachten wir die Bibliothek Kamel – ein leistungsstarkes Werkzeug für die Bildverarbeitung, das in reinem Kotlin geschrieben ist und Multiplattform unterstützt.
\n\nWas ist Kamel?
\n\nKamel (Kotlin Asynchronous Media Loading) ist eine Bibliothek zum Laden, Caching und Verarbeiten von Bildern, die speziell für Kotlin Multiplatform entwickelt wurde. Sie bietet eine einfache API für Operationen wie resize und crop, ohne dass schwere Frameworks wie Glide oder Picasso eingebunden werden müssen. Kamel unterstützt Android, iOS, JVM und JavaScript, was es zur idealen Wahl für plattformübergreifende Projekte macht.
Die Installation der Bibliothek erfolgt über Gradle:
\n\n// build.gradle.kts (commonMain)\nimplementation("media.kamel:kamel-image:1.0.0")\n\nGrößenänderung eines Bildes (resize)
\n\nDie Operation resize ermöglicht es, die ursprünglichen Abmessungen eines Bildes auf eine bestimmte Breite und Höhe zu ändern. In Kamel wird dies über die Funktion resize() realisiert, die die Zielgrößen und den Skalierungsmodus (scale mode) akzeptiert.
Beispiel für eine grundlegende Größenänderung:
\n\nimport androidx.compose.runtime.*\nimport media.kamel.image.loadImage\nimport media.kamel.image.resizer.*\n\n@Composable\nfun ResizedImage() {\n val image = loadImage(\n data = "https://example.com/photo.jpg",\n resizer = Resizer(\n width = 300,\n height = 200,\n scaleMode = ScaleMode.Fit\n )\n )\n // Anzeige des image im Image composable\n}\n\nIn diesem Beispiel wird das Bild auf 300x200 Pixel skaliert, wobei das Seitenverhältnis beibehalten wird (ScaleMode.Fit). Wenn das Bild ohne Beibehaltung des Seitenverhältnisses gestreckt werden soll, verwenden Sie ScaleMode.Fill oder ScaleMode.Crop (letzteres schneidet die Ränder automatisch ab).
Zuschneiden eines Bildes (crop)
\n\nCrop ermöglicht das Ausschneiden eines rechteckigen Bereichs aus dem Originalbild. In Kamel kann das Zuschneiden auf zwei Arten erfolgen:
\n\n- \n
- Über ScaleMode.Crop – automatischer Zuschnitt beim Skalieren; \n
- Durch manuelle Angabe einer Region – mit der Klasse
ImageRegion. \n
Beispiel für manuelles Zuschneiden:
\n\nimport media.kamel.image.loadImage\nimport media.kamel.image.cropper.*\n\n@Composable\nfun CroppedImage() {\n val image = loadImage(\n data = "https://example.com/photo.jpg",\n cropper = Cropper(\n region = ImageRegion(\n left = 50,\n top = 50,\n width = 200,\n height = 150\n )\n )\n )\n // Anzeige des zugeschnittenen Bildes\n}\n\nHier wird aus dem Bild ein Bereich ausgeschnitten, der bei den Koordinaten (50, 50) beginnt und eine Größe von 200x150 Pixeln hat. Dies ist nützlich, wenn ein bestimmter Teil extrahiert werden soll, z. B. ein Gesicht auf einem Foto.
\n\nKombination von resize und crop
\n\nHäufig müssen beide Operationen nacheinander ausgeführt werden: zuerst zuschneiden, dann die Größe ändern. Kamel ermöglicht die Kombination durch eine Aufrufkette:
\n\n@Composable\nfun CombinedProcessing() {\n val image = loadImage(\n data = "https://example.com/photo.jpg",\n resizer = Resizer(width = 400, height = 300, scaleMode = ScaleMode.Fit),\n cropper = Cropper(region = ImageRegion(100, 100, 600, 450))\n )\n}\n\nReihenfolge der Ausführung: Zuerst wird