web-dev-qa-db-fra.com

Redimensionner l'image en Java

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.

23
Suhail Gupta

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.

59
Alba Mendez

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
16
Thomas

Essaye ça:

ImageIcon icon = new ImageIcon(UrlToPngFile);
Image scaleImage = icon.getImage().getScaledInstance(28, 28,Image.SCALE_DEFAULT);
8
Harry Joy

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;
        }
    }
2
Radadiya Nikunj