Travail avec les images en Kotlin : aperçu des bibliothèques et exemples pratiques
Kotlin est un langage multiplateforme moderne, activement utilisé pour le développement sur JVM (Desktop), Android, ainsi que dans les projets backend et multiplateformes (KMP). Travailler avec des images est une tâche courante, et l'écosystème Kotlin propose plusieurs approches : de l'utilisation des bibliothèques Java standard aux solutions spécialisées pour Android et Kotlin Multiplatform. Dans cet article, nous passerons en revue les principales bibliothèques et outils, montrerons des exemples de code et donnerons des recommandations pratiques.
1. Outils intégrés : AWT (Java Desktop / JVM)
Pour les applications de bureau sur JVM (par exemple, JavaFX ou Swing), il est plus pratique d'utiliser les packages standard java.awt et javax.imageio. Ces bibliothèques sont disponibles « prêtes à l'emploi » et permettent de charger, redimensionner, convertir des formats et dessiner sur des images.
Exemple : chargement, redimensionnement et enregistrement
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("Image enregistrée : $outputPath")}
fun main() { resizeImage("input.jpg", "output.jpg", 800, 600)}Pour la rotation, l'ajout de filigranes ou le recadrage, vous pouvez utiliser les méthodes Graphics2D et les transformations affines.
2. Android : Bitmap et BitmapFactory
Dans le développement Android avec Kotlin, la base pour travailler avec les images est la classe android.graphics.Bitmap et les utilitaires BitmapFactory. Ils permettent de charger des images depuis les ressources, les fichiers ou le réseau, ainsi que d'effectuer un traitement de base.
Exemple : chargement depuis les ressources et redimensionnement (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()}Pour un traitement plus complexe (filtres, effets), vous pouvez utiliser android.renderscript (obsolète dans l'API 31) ou la bibliothèque OpenCV Android.
3. Kotlin Multiplatform (KMP) : bibliothèque KVision ou solutions personnalisées
Dans les projets multiplateformes, il n'existe pas de norme unique pour travailler avec les images. On utilise souvent :
- KVision — un framework pour les applications web en Kotlin/JS, avec une prise en charge intégrée du travail avec Canvas et ImageData.
- Okio + ImageIO (JVM) / Bitmap (Android) — pour KMP, on écrit souvent des wrappers
expect/actual, où chaque plateforme utilise sa propre implémentation. - Skiko — une bibliothèque de JetBrains pour le travail graphique (Skia), disponible sur JVM, JS et Native. Elle permet de charger, dessiner et exporter des images.
Exemple expect/actual pour KMP :
// commonMainexpect fun loadImageBytes(path: String): ByteArray
// androidMainactual fun load Aussi dans la bibliothèque
Eigen C++ : guide complet avec exemples pratiques
GraphQL sur Kotlin : Aperçu des bibliothèques et outils pour le développement serveur
SwiftUI pour Swift : guide complet avec exemples