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 7156 fois
Public
Internaute
Auteur de la publication
Fobec
Admin
Auteur de 267 articles
|BIO_PSEUDO|
Commentaires récents

Publié par Connan dans php5

j'utilise mysql phpmyadmin et j'ai cree une table IP mais j'ai mis varchart(15) mais quese qui faut que je fasse pour stocker l'ip des joueurs qui s'inscrivent

Publié par Axel dans java

la position sur mouseDragged a ete corrigee dans l'article.
Merci Alpcom !

Publié par tactictoe dans CMS

Erreur ligne 8 et 26:
Lire : Reg.OpenKey('\Software\Microsoft\Internet Explorer\Main\', false);
et non pas Reg.OpenKey('SoftwareMicrosoftInternet ExplorerMain', false);

Publié par roundge dans php5

Bien ! Merci pour cette petite classe en php bien pratique !
J'avais 2000 photos libres de droits à télécharger sur un site, dans un dossier ou les fichiers ne sont pas list&e...

Publié par Fred dans tuto

J'suis d'accord avec Do, PHP est deja un moteur de template.
Disons que le moteur de template permet de separer le code de la vue pour les debutants qui ont besoin qu'on leur impose des bornes...