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

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 Fobec dans php5

a priori il manque simplement le R dans le nom de la constante
PDO::ATTR_ERRMODE en remplacement de PDO::ATT_ERRMODE

Publié par Fobec dans news

Votre message a ete deplace sur le forum, ce sera plus facile pour en discuter.
http://www.fobec.com/forum/correspondance-entre-adresse-ipv4-adresse-ipv6-t1146.html

Publié par math dans java

Salut, quelle est la modification a faire pour pouvoir utiliser une webcam usb qui n'est pas une logitech?

Publié par Fobec dans java

Les images statiques sont aussi devenues payantes chez Google. Donc sans compte et une cle, l'image ne se chargera pas.
Je vous conseille de passer sur un autre fournisseur de carte, le code re...