Redimensionner une image en Java

Rupam Yadav 12 octobre 2023
  1. Redimensionner et afficher une image en Java à l’aide de BufferedImage.getScaledInstance()
  2. Redimensionner l’image et l’enregistrer dans un répertoire local en Java à l’aide de Graphics2D et ImageIO
Redimensionner une image en Java

Java peut effectuer plusieurs opérations de différents types comme la lecture, l’écriture ou la suppression d’un fichier. Dans les exemples suivants, nous montrerons comment vous pouvez redimensionner une image en Java à l’aide de trois techniques.

Redimensionner et afficher une image en Java à l’aide de BufferedImage.getScaledInstance()

Dans le premier exemple, nous redimensionnons une image et l’affichons dans un cadre sans l’enregistrer nulle part. Ici, nous créons un objet bufferedImage de la classe bufferedImage. La classe bufferedImage étend la classe Image représentant les images graphiques sous la forme d’un tableau de pixels rectangulaires. Pour lire l’image, nous utilisons la fonction ImageIO.read(). Ici, ImageIO est une classe qui contient des méthodes statiques comme read et write pour effectuer des opérations d’entrée et de sortie.

Nous obtenons notre image en utilisant la méthode new File() qui appelle le constructeur de classe File et lui passe l’emplacement de l’image comme argument. Une fois que nous avons obtenu l’objet bufferedImage, nous l’utilisons pour appeler la méthode getScaledInstance() qui crée une version mise à l’échelle de l’image.

La fonction getScaledInstance prend trois arguments : les deux premiers sont la largeur et la hauteur en pixels que l’on veut donner à l’image, et le dernier argument est l’algorithme à utiliser pour la mise à l’échelle. Ici, nous utilisons la fonction Image.SCALE_DEFAULT, qui indique à la classe d’utiliser l’algorithme d’échantillonnage par défaut.

Une fois cela fait, nous créons une fenêtre pour afficher l’image à l’aide de l’objet JFrame. Nous définissons la disposition de l’objet frame comme FlowLayout, qui organise les composants en ligne. Ensuite, nous définissons la taille de la fenêtre ; notez que cette taille doit être supérieure à la hauteur et à la largeur de l’image pour afficher complètement l’image.

Enfin, pour afficher l’image, nous créons un objet de JLabel et appelons la classe section qui définit l’image comme une icône. Enfin, nous ajoutons l’objet JLabel à l’objet frame et définissons la visibilité sur true.

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

public class ResizeImageExample {
  public static void main(String[] args) throws IOException {
    new ResizeImageExample();
  }

  public ResizeImageExample() throws IOException {
    BufferedImage bufferedImage = ImageIO.read(new File("C:\\Users\\User1\\Pictures\\java.png"));
    Image image = bufferedImage.getScaledInstance(600, 400, Image.SCALE_DEFAULT);

    ImageIcon icon = new ImageIcon(image);
    JFrame frame = new JFrame();
    frame.setLayout(new FlowLayout());
    frame.setSize(800, 600);

    JLabel jLabel = new JLabel();
    jLabel.setIcon(icon);
    frame.add(jLabel);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
}

Production:

java redimensionner l’image 1

Redimensionner l’image et l’enregistrer dans un répertoire local en Java à l’aide de Graphics2D et ImageIO

Dans la deuxième méthode, nous utilisons la classe Graphics2D pour créer des graphiques. La première étape consiste à récupérer le fichier image en utilisant la méthode ImageIo.read() qui prend un objet File comme argument contenant le chemin de l’image. Le ImageIo.read() renvoie l’objet BufferedImage, bufferedImageInput. Nous créons un autre objet BufferedImage à utiliser lors de l’écriture de l’image. Il prend trois arguments : la hauteur, la largeur et le type d’image.

Nous appelons maintenant la méthode createGraphics() en utilisant l’objet bufferdImageOutput qui renvoie un objet Graphics2D, g2d. Ensuite, nous créons l’image avec la méthode drawImage() qui prend six arguments. Le premier est l’objet BufferedImage, le deuxième et le troisième sont les coordonnées x et y qui augmentent en fonction de la taille si les deux valeurs sont nulles. Les quatrième et cinquième arguments représentent la nouvelle hauteur et la nouvelle largeur que nous voulons donner à l’image, et le dernier argument est le ImageObserver qui est null dans notre cas.

Avant de continuer, nous éliminons tout le contexte et les ressources utilisées par g2d à l’aide de la fonction g2d.dispose(). Pour enregistrer l’image redimensionnée dans le répertoire local, on utilise la fonction ImageIo.write() qui prend l’objet bufferedImageOutput, le nom à donner au nouveau fichier image et le constructeur File avec le chemin du fichier.

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

public class ResizeImageExample {
  public static void main(String[] args) throws IOException {
    resizeFile("C:\\Users\\Rupam Saini\\Pictures\\java.png",
        "C:\\Users\\Rupam Saini\\Pictures\\java-resized.png", 500, 500);
  }

  public static void resizeFile(String imagePathToRead, String imagePathToWrite, int resizeWidth,
      int resizeHeight) throws IOException {
    File fileToRead = new File(imagePathToRead);
    BufferedImage bufferedImageInput = ImageIO.read(fileToRead);

    BufferedImage bufferedImageOutput =
        new BufferedImage(resizeWidth, resizeHeight, bufferedImageInput.getType());

    Graphics2D g2d = bufferedImageOutput.createGraphics();
    g2d.drawImage(bufferedImageInput, 0, 0, resizeWidth, resizeHeight, null);
    g2d.dispose();

    String formatName = imagePathToWrite.substring(imagePathToWrite.lastIndexOf(".") + 1);

    ImageIO.write(bufferedImageOutput, formatName, new File(imagePathToWrite));
  }
}

Image avant redimensionnement :

java redimensionner l’image 2

Image après redimensionnement :

java redimensionner l’image 3

Auteur: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn

Article connexe - Java Image