Travailler avec les images en Java : redimensionnement et recadrage (resize, crop)
\n\nDans le développement moderne d'applications web et de programmes de bureau, il est souvent nécessaire de traiter des fichiers graphiques. Java fournit une boîte à outils intégrée puissante pour travailler avec les images, sans nécessiter l'installation de bibliothèques tierces. Dans cet article, nous allons détailler deux opérations de base : le redimensionnement (resize) et le recadrage (crop) d'images en utilisant les classes standard javax.imageio et java.awt.
Classes Java clés pour le traitement d'images
\n\nAvant de passer aux exemples, découvrons les principaux composants de l'API Java 2D qui seront nécessaires pour le travail :
\n\n- \n
BufferedImage— la classe principale pour représenter une image avec accès aux pixels. \n Graphics2D— le contexte de dessin, permettant d'effectuer des transformations, des mises à l'échelle et du dessin. \n AffineTransform— la classe pour les transformations affines (mise à l'échelle, rotation, translation). \n ImageIO— la classe utilitaire pour lire et écrire des images dans divers formats (JPEG, PNG, BMP, etc.). \n
Toutes ces classes font partie de la distribution standard du JDK, donc leur utilisation ne nécessite pas l'ajout de dépendances supplémentaires (Maven/Gradle).
\n\n1. Redimensionnement d'image (resize)
\n\nL'opération de redimensionnement (mise à l'échelle) peut être effectuée de deux manières principales : en utilisant Graphics2D (la méthode la plus flexible) ou via AffineTransformOp (pour un contrôle plus précis de l'interpolation). Examinons les deux approches.
Méthode 1 : Via Graphics2D (recommandée pour la plupart des tâches)
\n\nCette méthode convient lorsque vous devez rapidement changer la taille tout en préservant la qualité. Nous dessinons l'image source sur une nouvelle toile BufferedImage de la taille souhaitée.
import java.awt.*;\nimport java.awt.image.BufferedImage;\nimport java.io.File;\nimport javax.imageio.ImageIO;\n\npublic class ImageResizer {\n\n public static BufferedImage resize(BufferedImage originalImage, int targetWidth, int targetHeight) {\n // Créer une nouvelle image avec les dimensions spécifiées et le type RGB\n BufferedImage resizedImage = new BufferedImage(targetWidth, targetHeight, BufferedImage.TYPE_INT_RGB);\n \n // Obtenir le contexte de dessin\n Graphics2D graphics2D = resizedImage.createGraphics();\n \n // Activer l'anticrénelage pour un résultat de meilleure qualité\n graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);\n graphics2D.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);\n graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);\n \n // Dessiner l'image source en la redimensionnant aux nouvelles dimensions\n graphics2D.drawImage(originalImage, 0, 0, targetWidth, targetHeight, null);\n graphics2D.dispose(); // Libérer les ressources\n \n return resizedImage;\n }\n\n public static void main(String[] args) throws Exception {\n // Lire l'image source\n BufferedImage original = ImageIO.read(new File("input.jpg"));\n \n // Redimensionner à 800x600 pixels\n BufferedImage resized = resize(original, 800, 600);\n \n // Enregistrer le résultat\n ImageIO.write(resized, "jpg", new File("output_resized.jpg"));\n System.out.println("Image redimensionnée et enregistrée.");\n }\n}\n\nImportant : Utilisez RenderingHints pour améliorer la qualité. VALUE_INTERPOLATION_BILINEAR offre un bon équilibre entre vitesse et qualité, tandis que VALUE_INTERPOLATION_BICUBIC offre un maximum
Aussi dans la bibliothèque
Internationalisation (i18n) en C# (.NET) : guide complet
TipKit Swift : guide complet avec exemples
Client HTTP pour Java : aperçu des meilleures bibliothèques (Java 11, Apache, OkHttp, Retrofit)
Géolocalisation et cartes en C# (.NET) : aperçu des bibliothèques et outils