Traitement d'images en Java : bibliothèques, outils et exemples de code

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 les images en Java : bibliothèques, outils et exemples de code



Java offre des outils intégrés puissants pour travailler avec les graphiques, ainsi qu'un riche écosystème de bibliothèques tierces. Dans cet article, nous examinerons les principales méthodes de chargement, de traitement, de transformation et de sauvegarde d'images en Java — des classes standard javax.imageio et java.awt aux bibliothèques populaires qui simplifient la vie du développeur.



1. Outils standard : javax.imageio et java.awt.image



Le travail de base avec les images matricielles en Java repose sur le package javax.imageio (chargement/sauvegarde) et java.awt.image (travail avec les pixels). La classe principale est BufferedImage, qui stocke l'image en mémoire vive.



Chargement et sauvegarde d'une image



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

public class ImageExample { public static void main(String[] args) throws IOException { // Chargement d'une image depuis un fichier BufferedImage image = ImageIO.read(new File("input.jpg")); System.out.println("Largeur : " + image.getWidth() + ", Hauteur : " + image.getHeight());

// Sauvegarde dans un autre format ImageIO.write(image, "png", new File("output.png")); }}


ImageIO prend en charge les formats : JPEG, PNG, BMP, WBMP, GIF (lecture uniquement). Pour étendre la liste des formats, utilisez les plugins ImageIO (par exemple, TwelveMonkeys).



Redimensionnement (méthode manuelle)



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

public static BufferedImage resize(BufferedImage original, int newWidth, int newHeight) { BufferedImage resized = new BufferedImage(newWidth, newHeight, original.getType()); Graphics2D g2d = resized.createGraphics(); g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); g2d.drawImage(original, 0, 0, newWidth, newHeight, null); g2d.dispose(); return resized;}


2. API Java 2D : dessin et filtres



La classe Graphics2D permet non seulement de redimensionner, mais aussi d'appliquer des effets, de faire pivoter, de recadrer des images, d'ajouter du texte et des formes géométriques.



Ajout d'un filigrane



public static BufferedImage addWatermark(BufferedImage source, String text) {    BufferedImage result = new BufferedImage(source.getWidth(), source.getHeight(), source.getType());    Graphics2D g2d = result.createGraphics();    g2d.drawImage(source, 0, 0, null);    g2d.setColor(new Color(255, 255, 255, 128));    g2d.setFont(new Font("Arial", Font.BOLD, 40));    g2d.drawString(text, 20, source.getHeight() - 20);    g2d.dispose();    return result;}


Application d'un filtre de couleur (sépia)



public static BufferedImage applySepia(BufferedImage img) {    int width = img.getWidth();    int height = img.getHeight();    BufferedImage sepia = new BufferedImage(width, height, img.getType());

for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { int rgb = img.getRGB(x, y); int r = (rgb >> 16) & 0xFF; int g = (rgb >> 8) & 0xFF; int b = rgb & 0xFF;

int newR = (int) (0.393 * r + 0.769 * g + 0.189 * b); int newG = (int) (0.349 * r + 0.686 * g + 0.168 * b); int newB = (int) (0.272 * r + 0.534 * g + 0.131 * b);

newR = Math.min(255, newR); newG = Math.min(255, newG); newB = Math.min(255, newB);

int newPixel = (0xFF << 24) | (newR << 16) | (newG << 8) | newB; sepia.setRGB(x, y, newPixel); } } return sepia;}


3. Thumbnailator — une génération simple

Recommendations