Redimensionner une image en Java
-
Redimensionner et afficher une image en Java à l’aide de
BufferedImage.getScaledInstance()
-
Redimensionner l’image et l’enregistrer dans un répertoire local en Java à l’aide de
Graphics2D
etImageIO
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:
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 :
Image après redimensionnement :
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