Redimensionner une image avec BufferedImage

A l'aide de Graphics2D, une image peut facilement être réduite ou agrandie. Pour illustrer le redimensionnement d'une image avec BufferedImage, les opérations suivantes sont effectuées sur une image:
- charger une image PNG avec ImageIO,
- réduction ou agrandissement en appliquant une coefficient de redimensionnement,
- enregistrer la nouvelle image PNG avec ImageIO.

import java.awt.Graphics2D;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsEnvironment;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;

/**
 * Redimensionner une image
 */
public class ImageRedim {

    public static BufferedImage scale(BufferedImage bImage, double factor) {
        int destWidth=(int) (bImage.getWidth() * factor);
        int destHeight=(int) (bImage.getHeight() * factor);
//créer l'image de destination
        GraphicsConfiguration configuration = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration();
        BufferedImage bImageNew = configuration.createCompatibleImage(destWidth, destHeight);
        Graphics2D graphics = bImageNew.createGraphics();
        graphics.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
        graphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR);
        //dessiner l'image de destination
        graphics.drawImage(bImage, 0, 0, destWidth, destHeight, 0, 0, bImage.getWidth(), bImage.getHeight(), null);
        graphics.dispose();

        return bImageNew;
    }

    public static void main(String[] args) {
        try {
            //Exemple pour agrandir
            BufferedImage img = ImageIO.read(new File("c:/j.png"));
            BufferedImage imgnew=scale(img, 10);
            ImageIO.write(imgnew, "png", new File("c:/jgrand.png"));
           
            //Exemple de reduction
            BufferedImage imag = ImageIO.read(new File("c:/j.png"));
            BufferedImage imagnew=scale(img, 0.5);
            ImageIO.write(imagnew, "png", new File("c:/jpetit.png"));
        } catch (IOException ex) {
            Logger.getLogger(ImageRedim.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

Commentaire des internautes
avatar
Mohamed le 13/10/2011
Merci beaucoup j'ai eu un problème de redimensionnement des images , mes images perdaient leur qualité, ta solution m'a aidé pour ça mercii
Ajouter un commentaire
Pseudo
Adresse email
Site internet (optionnel)
Votre commentaire
Fiche de l'article
Mise a jour08/09/2010
VisualisationVu 1827 fois
PublicInternaute
CategorieJAVA - Sources - AWT
Auteur de l'article
fobec fobec
connecté le 01/02/2012
36 ans - France Nord-Est
101 articles dans la section
Contacter l'auteur
Partager l'article