Publié le 08/09/2010
Auteur fobec
Réseaux sociaux
0 partages
0 tweets
0 plus
2 commentaires

Redimensionner une image avec BufferedImage

Java dispose de toutes les librairies pour redimensionner une image sans trop perdre de qualité. En quelques lignes de code, une image peut etre agrandit ou réduite en conservant les mêmes proportions.

Agrandir ou réduire une image

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);
        }
    }
}


La class a été construite pour redimensionner les images à la volé, c''est à dire les images d'origine reste intacte et seules les images affichées dans l'application sont réduites. Pour sauvegarder les nouvelles images, on peut utiliser un fileWrite ou la lib ImageIO.

Ajouter un commentaire

Les champs marqués d'un * sont obligatoires, les adresses emails se sont pas publiées.
avatar Mohamed

Publié par Mohamed

le 13/10/2011 à 18:55:08

Merci beaucoup j'ai eu un probleme de redimensionnement des images , mes images perdaient leur qualite, ta solution m'a aide pour ca mercii

avatar bob le poisson

Publié par bob le poisson

le 06/07/2012 à 20:00:38

Bonjour, votre script est tres bien mais attention l'utilisation du mot cle static sur la methode scale(BufferedImage bImage, double factor) est inutile et empeche de liberer la ressource.

A lire aussi

Réseaux sociaux
Présentation de l'article
Catégorie
java - sources
Mise a jour
08/09/2010
Visualisation
vu 5189 fois
Public
Internaute
Auteur de la publication
Fobec
Admin
Auteur de 261 articles
|BIO_PSEUDO|
Commentaires récents

Publié par hungerGames dans php5

Salut!
je suis un debutant en php,et lorsque j'ai execute le code
sur la creation de la base 'member',on m'a affiche cet message:
"Undefined class constant 'ATT_ERRMOD...

Publié par traitstone dans CMS

c'est bou et tres bon chose

Publié par mido dans java

si je veut extraire les liens a partir de google searche c'est a dire utiliser la raquette suivante "http://www.google.tn/search?q=" avec java bien sur ..merci d'avance :)

Publié par slimaneboufnar2011 dans CMS

merci de votre aide <br>

Publié par traitstone dans CMS

c'est bou et tres bon chose