Travail avec les images en Java : de la lecture au traitement

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 Java : bibliothèques et exemples pratiques



Java fournit des outils intégrés puissants pour travailler avec les images matricielles. Dans cet article, nous examinerons la bibliothèque standard javax.imageio, le package java.awt.image et la bibliothèque tierce populaire Thumbnailator. Vous apprendrez à lire, enregistrer, redimensionner, appliquer des filtres et convertir des formats d'images.



1. Bases : le package javax.imageio et BufferedImage



La classe clé pour représenter une image en mémoire est BufferedImage. Elle permet d'obtenir et de modifier les pixels, de travailler avec différents modèles de couleurs (RGB, ARGB) et types de données.



Lecture d'une image à partir d'un fichier



import javax.imageio.ImageIO;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;

public class ImageReadExample { public static void main(String[] args) { try { File inputFile = new File("input.jpg"); BufferedImage image = ImageIO.read(inputFile); System.out.println("Largeur : " + image.getWidth()); System.out.println("Hauteur : " + image.getHeight()); System.out.println("Type : " + image.getType()); } catch (IOException e) { e.printStackTrace(); } }}


Écriture d'une image dans un fichier



File outputFile = new File("output.png");ImageIO.write(image, "png", outputFile); // Le format est déterminé par l'extension


Formats pris en charge : JPEG, PNG, BMP, WBMP, GIF (lecture uniquement). La liste complète peut être obtenue via ImageIO.getReaderFormatNames().



2. Redimensionnement et transformations avec Java 2D



Le package java.awt.Graphics2D permet d'effectuer un redimensionnement de qualité, une rotation, un retournement et une superposition d'images.



Redimensionnement avec conservation des proportions



import java.awt.Graphics2D;import java.awt.RenderingHints;import java.awt.image.BufferedImage;

public class ImageResizer { public static BufferedImage resize(BufferedImage original, int targetWidth, int targetHeight) { BufferedImage resized = new BufferedImage(targetWidth, targetHeight, original.getType()); Graphics2D g2d = resized.createGraphics(); // Activation de l'anticrénelage pour une meilleure qualité 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; }}


Rotation d'une image de 90 degrés



public static BufferedImage rotate(BufferedImage image, double angleDegrees) {    double radians = Math.toRadians(angleDegrees);    int w = image.getWidth();    int h = image.getHeight();        // Nouvelle taille après rotation    int newW = (int) Math.abs(w * Math.cos(radians)) + (int) Math.abs(h * Math.sin(radians));    int newH = (int) Math.abs(h * Math.cos(radians)) + (int) Math.abs(w * Math.sin(radians));        BufferedImage rotated = new BufferedImage(newW, newH, BufferedImage.TYPE_INT_ARGB);    Graphics2D g2d = rotated.createGraphics();    g2d.translate((newW - w) / 2.0, (newH - h) / 2.0);    g2d.rotate(radians, w / 2.0, h / 2.0);    g2d.drawImage(image, 0, 0, null);    g2d.dispose();    return rotated;}


3. Application de filtres : flou, contraste, luminosité



Pour le filtrage, utilisez BufferedImageOp (du package java.awt.image). Les implémentations les plus utiles :



    \

Recommendations