Изменение размера изображения в Java
У меня есть изображение PNG, и я хочу изменить его размер. Как я могу это сделать? Хотя я прошел через это, я не могу понять фрагмент.
Ответы
Ответ 1
Если у вас есть java.awt.Image
, rezising не требует каких - либо дополнительных библиотек. Просто делать:
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
: Используйте алгоритм масштабирования изображения, Image.SCALE_REPLICATE
в классе ReplicateScaleFilter
.
Смотрите Javadoc для получения дополнительной информации.
Ответ 2
Мы делаем это для создания эскизов изображений:
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
Ответ 3
Попробуйте следующее:
ImageIcon icon = new ImageIcon(UrlToPngFile);
Image scaleImage = icon.getImage().getScaledInstance(28, 28,Image.SCALE_DEFAULT);
Ответ 4
Изменить размер изображения с высоким качеством:
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;
}
}