J'ai une image PNG et je veux la redimensionner. Comment puis je faire ça? Bien que j'aie traversé ceci je ne peux pas comprendre l'extrait.
Si vous avez un Java.awt.Image
, la rezise ne nécessite aucune bibliothèque supplémentaire. Faites juste:
Image newImage = yourImage.getScaledInstance(newWidth, newHeight, Image.SCALE_DEFAULT);
Évidemment, remplacez newWidth
et newHeight
par les dimensions de l'image spécifiée.
Remarquez le dernier paramètre: il indique au runtime l'algorithme que vous souhaitez utiliser pour le redimensionnement.
Il existe des algorithmes qui produisent un résultat très précis, mais ils prennent beaucoup de temps à compléter.
Vous pouvez utiliser l'un des algorithmes suivants:
Image.SCALE_DEFAULT
: utilisez l'algorithme de mise à l'échelle de l'image par défaut.Image.SCALE_FAST
: choisissez un algorithme de mise à l'échelle de l'image qui accorde une priorité plus élevée à la vitesse de mise à l'échelle qu'à la fluidité de l'image mise à l'échelle.Image.SCALE_SMOOTH
: choisissez un algorithme de mise à l'échelle de l'image qui accorde une priorité plus élevée à la fluidité de l'image qu'à la vitesse de mise à l'échelle.Image.SCALE_AREA_AVERAGING
: utilisez l'algorithme de mise à l'échelle de la moyenne des zones.Image.SCALE_REPLICATE
: utilisez l'algorithme de mise à l'échelle de l'image incorporé dans la classe ReplicateScaleFilter
.Voir Javadoc pour plus d'informations.
Nous faisons cela pour créer des miniatures d'images:
BufferedImage tThumbImage = new BufferedImage( tThumbWidth, tThumbHeight, BufferedImage.TYPE_INT_RGB );
Graphics2D tGraphics2D = tThumbImage.createGraphics(); //create a graphics object to Paint to
tGraphics2D.setBackground( Color.WHITE );
tGraphics2D.setPaint( Color.WHITE );
tGraphics2D.fillRect( 0, 0, tThumbWidth, tThumbHeight );
tGraphics2D.setRenderingHint( RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR );
tGraphics2D.drawImage( tOriginalImage, 0, 0, tThumbWidth, tThumbHeight, null ); //draw the image scaled
ImageIO.write( tThumbImage, "JPG", tThumbnailTarget ); //write the image to a file
Essaye ça:
ImageIcon icon = new ImageIcon(UrlToPngFile);
Image scaleImage = icon.getImage().getScaledInstance(28, 28,Image.SCALE_DEFAULT);
Redimensionner l'image avec une haute qualité:
private static InputStream resizeImage(InputStream uploadedInputStream, String fileName, int width, int height) {
try {
BufferedImage image = ImageIO.read(uploadedInputStream);
Image originalImage= image.getScaledInstance(width, height, Image.SCALE_DEFAULT);
int type = ((image.getType() == 0) ? BufferedImage.TYPE_INT_ARGB : image.getType());
BufferedImage resizedImage = new BufferedImage(width, height, type);
Graphics2D g2d = resizedImage.createGraphics();
g2d.drawImage(originalImage, 0, 0, width, height, null);
g2d.dispose();
g2d.setComposite(AlphaComposite.Src);
g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g2d.setRenderingHint(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_QUALITY);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
ImageIO.write(resizedImage, fileName.split("\\.")[1], byteArrayOutputStream);
return new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
} catch (IOException e) {
// Something is going wrong while resizing image
return uploadedInputStream;
}
}