Traitement d'images en Kotlin : redimensionnement et recadrage avec la bibliothèque ImageMagick

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Travailler avec les images en Kotlin : redimensionnement et recadrage (resize & crop)



Dans le développement web moderne et la création d'applications mobiles en Kotlin, il est souvent nécessaire de traiter des images par programmation : réduire la taille pour optimiser le chargement, recadrer les bords superflus ou préparer des aperçus. Dans cet article, nous allons examiner un outil puissant pour le travail graphique — la bibliothèque ImageMagick (via le wrapper Java JMagick), qui est parfaitement adaptée aux tâches de redimensionnement et de recadrage en Kotlin.



Qu'est-ce qu'ImageMagick et JMagick ?

ImageMagick est un logiciel multiplateforme open source pour la création, l'édition et la conversion d'images matricielles. Il prend en charge plus de 200 formats (JPEG, PNG, GIF, WebP, TIFF et autres). Pour travailler avec ImageMagick depuis Java/Kotlin, on utilise la bibliothèque JMagick, qui fournit une interface native Java (JNI) aux fonctions d'ImageMagick.



Avantages de l'utilisation d'ImageMagick en Kotlin :

  • Haute performance (code natif C/C++)
  • Fonctionnalités riches : redimensionnement, recadrage, rotation, filtres, conversion de formats
  • Prise en charge du traitement par flux de grandes images
  • Contrôle précis de la qualité lors de la compression


Installation et configuration

Pour travailler avec JMagick, vous devez installer ImageMagick natif sur votre système. Ensuite, ajoutez la dépendance dans build.gradle.kts (pour Gradle) :



dependencies {    implementation("org.im4java:im4java:1.4.0") // Wrapper alternatif    // Ou utilisez JMagick :    implementation("org.jmagick:jmagick:6.6.9")}


Remarque : JMagick nécessite l'installation d'ImageMagick version 6.x (pas 7). Pour simplifier, dans les exemples, nous utiliserons im4java — un wrapper plus moderne ne nécessitant pas JNI.



Redimensionnement d'image (Resize)

L'opération resize modifie les dimensions d'une image en conservant les proportions (ou non). Dans im4java, cela se fait via la classe ConvertCmd.



Exemple : réduire une image à une largeur de 300 pixels en conservant les proportions :



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 = hauteur automatique selon les proportions op.addImage(outputPath)

cmd.run(op)}

fun main() { resizeImage("input.jpg", "output_resized.jpg", 300) println("Image réduite à une largeur de 300px")}


Paramètres de resize :

  • resize(width, height) — si un paramètre est null, les proportions sont conservées
  • resize(width, height, "^") — remplissage minimal de la zone
  • resize(width, height, "!") — redimensionnement forcé sans conservation des proportions


Recadrage d'image (Crop)

Crop découpe une zone rectangulaire dans une image. On spécifie les coordonnées du coin supérieur gauche et les dimensions de la zone.



Exemple : découper un carré central de 200x200 pixels :



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() { // Découper la zone : coin supérieur gauche (100,50), taille 400x300 cropImage("input.jpg", "output_cropped.jpg", 100, 50, 400, 300) println("Image recadrée")}


Pour un centrage automatique, on peut calculer les coordonnées :



                
    
    

Recommendations