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.