Java Image I/O API : redimensionnement et recadrage d'images | Guide

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

Recommendations