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

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

Travail avec les images en Kotlin : redimensionnement et recadrage avec la bibliothèque Kamel

\n\n

Dans le développement moderne pour Android et les projets multiplateformes en Kotlin, il est souvent nécessaire de redimensionner (resize) et recadrer (crop) des images par programmation. Cela est requis pour optimiser le chargement, créer des aperçus, s'adapter à différents écrans ou préparer des images pour l'envoi vers un serveur. Dans cet article, nous examinerons la bibliothèque Kamel — un outil puissant pour le traitement d'images, écrit en Kotlin pur et prenant en charge la multiplateforme.

\n\n

Qu'est-ce que Kamel ?

\n\n

Kamel (Kotlin Asynchronous Media Loading) est une bibliothèque pour le chargement, la mise en cache et le traitement d'images, créée spécialement pour Kotlin Multiplatform. Elle fournit une API simple pour effectuer des opérations telles que resize et crop, sans avoir besoin de frameworks lourds comme Glide ou Picasso. Kamel prend en charge Android, iOS, JVM et JavaScript, ce qui en fait un choix idéal pour les projets multiplateformes.

\n\n

L'installation de la bibliothèque se fait via Gradle :

\n\n
// build.gradle.kts (commonMain)\nimplementation("media.kamel:kamel-image:1.0.0")
\n\n

Redimensionnement d'image (resize)

\n\n

L'opération resize permet de modifier les dimensions d'origine de l'image à une largeur et une hauteur données. Dans Kamel, cela est implémenté via la fonction resize(), qui accepte les dimensions cibles et le mode de mise à l'échelle (scale mode).

\n\n

Exemple de redimensionnement de base :

\n\n
import 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    // Affichage de l'image dans un composable Image\n}
\n\n

Dans cet exemple, l'image sera mise à l'échelle à 300x200 pixels tout en conservant les proportions (ScaleMode.Fit). Si vous souhaitez étirer l'image sans conserver les proportions, utilisez ScaleMode.Fill ou ScaleMode.Crop (ce dernier recadre automatiquement les bords).

\n\n

Recadrage d'image (crop)

\n\n

Crop permet de découper une zone rectangulaire de l'image d'origine. Dans Kamel, le recadrage peut être effectué de deux manières :

\n\n
    \n
  • Via ScaleMode.Crop — recadrage automatique lors de la mise à l'échelle ;
  • \n
  • Via la spécification manuelle d'une région — à l'aide de la classe ImageRegion.
  • \n
\n\n

Exemple de recadrage manuel :

\n\n
import 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    // Affichage de l'image recadrée\n}
\n\n

Ici, une zone est découpée de l'image, commençant aux coordonnées (50, 50) et ayant une taille de 200x150 pixels. Cela est utile lorsque vous devez extraire une partie spécifique, par exemple un visage sur une photo.

\n\n

Combinaison de resize et crop

\n\n

Il est souvent nécessaire d'effectuer les deux opérations séquentiellement : d'abord recadrer, puis redimensionner. Kamel permet de les combiner via une chaîne d'appels :

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

Ordre d'exécution : d'abord appl

Recommendations