Изменение размера изображения в Java - PullRequest
22 голосов
/ 05 мая 2011

У меня есть изображение PNG, и я хочу изменить его размер.Как я могу это сделать?Хотя я прошел через этот , я не могу понять фрагмент.

Ответы [ 4 ]

57 голосов
/ 05 мая 2011

Если у вас есть java.awt.Image, изменение его размера не требует каких-либо дополнительных библиотек.Просто выполните:

Image newImage = yourImage.getScaledInstance(newWidth, newHeight, Image.SCALE_DEFAULT);

Явно, замените newWidth и newHeight размерами указанного изображения.
Обратите внимание на последний параметр: он сообщает среде выполнения алгоритм , который вы хотите использовать для изменения размера.

Существуют алгоритмы, которые дают очень точный результат, однако для их завершения требуется много времени.
Вы можете использовать любой из следующих алгоритмов:

  • Image.SCALE_DEFAULT: используйте алгоритм масштабирования изображения по умолчанию.
  • Image.SCALE_FAST: выберите алгоритм масштабирования изображенияэто дает более высокий приоритет скорости масштабирования, чем плавность масштабированного изображения.
  • Image.SCALE_SMOOTH: выберите алгоритм масштабирования изображения, который отдает более высокий приоритет гладкости изображения, чем скорость масштабирования.
  • Image.SCALE_AREA_AVERAGING: использовать алгоритм масштабирования изображения с усреднением площади.
  • Image.SCALE_REPLICATE: использовать алгоритм масштабирования изображения, реализованный в классе ReplicateScaleFilter.

См. Javadoc для получения дополнительной информации.

14 голосов
/ 05 мая 2011

Мы делаем это для создания миниатюр изображений:

  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
7 голосов
/ 05 мая 2011

Попробуйте это:

ImageIcon icon = new ImageIcon(UrlToPngFile);
Image scaleImage = icon.getImage().getScaledInstance(28, 28,Image.SCALE_DEFAULT);
2 голосов
/ 27 марта 2019

Изменение размера изображения с высоким качеством:

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;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...