Bildverarbeitung in Kotlin: resize und crop mit der ImageMagick-Bibliothek

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: Größenänderung und Zuschneiden (resize & crop)



In der modernen Webentwicklung und bei der Erstellung mobiler Anwendungen mit Kotlin besteht häufig die Notwendigkeit, Bilder programmatisch zu verarbeiten: die Größe zur Optimierung der Ladezeit zu reduzieren, überflüssige Ränder zu beschneiden oder Vorschaubilder zu erstellen. In diesem Artikel betrachten wir ein leistungsstarkes Tool für die Grafikarbeit – die Bibliothek ImageMagick (über den Java-Wrapper JMagick), die sich ideal für resize- und crop-Aufgaben in Kotlin eignet.



Was sind ImageMagick und JMagick?

ImageMagick ist eine plattformübergreifende Open-Source-Software zum Erstellen, Bearbeiten und Konvertieren von Rastergrafiken. Sie unterstützt über 200 Formate (JPEG, PNG, GIF, WebP, TIFF und andere). Für die Arbeit mit ImageMagick aus Java/Kotlin wird die Bibliothek JMagick verwendet, die ein Java Native Interface (JNI) zu den Funktionen von ImageMagick bereitstellt.



Vorteile der Verwendung von ImageMagick in Kotlin:

  • Hohe Leistung (nativer C/C++-Code)
  • Umfangreiche Funktionalität: resize, crop, rotate, Filter, Formatkonvertierung
  • Unterstützung für die Streaming-Verarbeitung großer Bilder
  • Präzise Qualitätskontrolle bei der Komprimierung


Installation und Einbindung

Um mit JMagick zu arbeiten, muss ImageMagick nativ auf Ihrem System installiert sein. Fügen Sie dann die Abhängigkeit in build.gradle.kts (für Gradle) hinzu:



dependencies {    implementation("org.im4java:im4java:1.4.0") // Alternativer Wrapper    // Oder verwenden Sie JMagick:    implementation("org.jmagick:jmagick:6.6.9")}


Hinweis: JMagick erfordert die Installation von ImageMagick Version 6.x (nicht 7). Der Einfachheit halber verwenden wir in den Beispielen im4java – einen moderneren Wrapper, der kein JNI benötigt.



Größenänderung von Bildern (Resize)

Die Operation resize ändert die Bildabmessungen unter Beibehaltung (oder ohne Beibehaltung) der Proportionen. In im4java erfolgt dies über die Klasse ConvertCmd.



Beispiel: Bild auf eine Breite von 300 Pixeln verkleinern, Proportionen beibehalten:



import org.im4java.core.ConvertCmdimport org.im4java.core.IMOperation

fun resizeImage(inputPath: String, outputPath: String, targetWidth: Int) { val cmd = ConvertCmd() val op = IMOperation()

op.addImage(inputPath) op.resize(targetWidth, null) // null = automatische Höhe proportional op.addImage(outputPath)

cmd.run(op)}

fun main() { resizeImage("input.jpg", "output_resized.jpg", 300) println("Bild auf 300px Breite verkleinert")}


Parameter von resize:

  • resize(width, height) – wenn ein Parameter null ist, bleiben die Proportionen erhalten
  • resize(width, height, "^") – minimale Flächenfüllung
  • resize(width, height, "!") – erzwungene Änderung ohne Beibehaltung der Proportionen


Zuschneiden von Bildern (Crop)

Crop schneidet einen rechteckigen Bereich aus dem Bild aus. Angegeben werden die Koordinaten der oberen linken Ecke sowie die Abmessungen des Bereichs.



Beispiel: Mittleres Quadrat mit 200x200 Pixeln ausschneiden:



import org.im4java.core.ConvertCmdimport org.im4java.core.IMOperation

fun cropImage(inputPath: String, outputPath: String, x: Int, y: Int, width: Int, height: Int) { val cmd = ConvertCmd() val op = IMOperation()

op.addImage(inputPath) op.crop(width, height, x, y) op.addImage(outputPath)

cmd.run(op)}

fun main() { // Bereich ausschneiden: obere linke Ecke (100,50), Größe 400x300 cropImage("input.jpg", "output_cropped.jpg", 100, 50, 400, 300) println("Bild zugeschnitten")}


Für automatische Zentrierung können die Koordinaten berechnet werden:



                
    
    

Empfehlungen