Travailler avec des images en Java : redimensionnement (resize) et recadrage (crop)
Dans le développement web et de bureau moderne en Java, il est souvent nécessaire de traiter des images par programmation : les réduire pour des aperçus, recadrer les bords superflus ou les adapter à des proportions données. Dans la bibliothèque standard Java (Java SE), il n'existe pas de classe unique de haut niveau pour ces opérations, mais un ensemble d'outils puissants est disponible dans les packages java.awt, java.awt.image et javax.imageio. Dans cet article, nous allons détailler comment effectuer les opérations de resize (redimensionnement) et de crop (recadrage) à l'aide des outils intégrés de Java.
Classes principales pour le traitement d'images
Avant de passer au code, familiarisons-nous avec les classes clés :
javax.imageio.ImageIO– lecture et écriture d'images (prend en charge PNG, JPEG, BMP, GIF, etc.).java.awt.image.BufferedImage– image matricielle avec accès aux pixels.java.awt.Graphics2D– classe pour le dessin (mise à l'échelle, recadrage, superposition).java.awt.geom.AffineTransform– matrice de transformation pour une mise à l'échelle précise.
1. Redimensionnement d'image (Resize)
La méthode la plus courante consiste à redessiner l'image source sur une nouvelle toile aux dimensions souhaitées. Pour un résultat de qualité, utilisez RenderingHints.
import javax.imageio.ImageIO;import java.awt.*;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;
public class ImageResizer {
public static BufferedImage resize(BufferedImage original, int targetWidth, int targetHeight) { BufferedImage resized = new BufferedImage(targetWidth, targetHeight, BufferedImage.TYPE_INT_RGB); Graphics2D g2d = resized.createGraphics();
// Configuration de la qualité de mise à l'échelle g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.drawImage(original, 0, 0, targetWidth, targetHeight, null); g2d.dispose(); return resized; }
public static void main(String[] args) throws IOException { File input = new File("input.jpg"); BufferedImage source = ImageIO.read(input);
// Réduisons à 300x200 BufferedImage output = resize(source, 300, 200); ImageIO.write(output, "jpg", new File("resized.jpg")); System.out.println("Redimensionnement terminé !"); }}Remarques importantes :
- Si vous ne définissez pas
RenderingHints, le résultat sera de mauvaise qualité (pixels voisins). - Pour les PNG avec transparence, utilisez
BufferedImage.TYPE_INT_ARGB. - Les proportions ne sont pas conservées automatiquement – si nécessaire, calculez manuellement le rapport hauteur/largeur.
2. Conservation des proportions (Aspect Ratio)
Pour ne pas déformer l'image, calculez une nouvelle taille en conservant les proportions :
public static BufferedImage resizeKeepRatio(BufferedImage original, int maxWidth, int maxHeight) { int origWidth = original.getWidth(); int origHeight = original.getHeight();
double widthRatio = (double) maxWidth / origWidth; double heightRatio = (double) maxHeight / origHeight; double ratio = Math.min(widthRatio, heightRatio);
int newWidth = (int) (origWidth * ratio); int newHeight = (int) (origHeight * ratio);
return resize(original, newWidth, newHeight);}3. Recadrage d'image (Crop)
Le recadrage en Java s'effectue à l'aide de la méthode getSubi
Aussi dans la bibliothèque
Cobra pour Go : guide complet avec exemples
Travailler avec Excel en Kotlin : bibliothèques Apache POI et Apache POI pour Kotlin
Files d'attente de tâches en Java : Aperçu et implémentation avec java.util.concurrent
Apprentissage automatique en C# (.NET) : aperçu des bibliothèques ML.NET, Accord.NET, TensorFlow.NET
Tests en Kotlin : frameworks et outils pour un code de qualité