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'extensionFormats 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 :
- \
Aussi dans la bibliothèque
Travailler avec les archives ZIP en C# (.NET) : guide complet
Client HTTP pour Java : aperçu des meilleures bibliothèques (Java 11, Apache, OkHttp, Retrofit)
Migrations de bases de données en C++ : aperçu des outils et bibliothèques
Parsing HTML en Java : meilleures bibliothèques et exemples de code
Générateur de QR codes en Go (Golang) : bibliothèque go-qrcode