Домой java Как изменить размер изображения в Java?

Как изменить размер изображения в Java?

1892
0

Я не эксперт в обработке изображений Java, но у меня есть шанс реализовать эту функцию изменения размера в форме загрузки пользовательских изображений, которая запрашивает изменение размера большого изображения до меньшего размера с фиксированной шириной и высотой.

Graphics2D предоставляет функцию изменения размера изображения следующим образом:


BufferedImage resizedImage = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, type);
Graphics2D g = resizedImage.createGraphics();
g.drawImage(originalImage, 0, 0, IMG_WIDTH, IMG_HEIGHT, null);
g.dispose();

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


BufferedImage resizedImage = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, type);
Graphics2D g = resizedImage.createGraphics();
g.drawImage(originalImage, 0, 0, IMG_WIDTH, IMG_HEIGHT, null);
g.dispose();
g.setComposite(AlphaComposite.Src);
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.setRenderingHint(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_QUALITY);
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);

1. Пример

Вот снимок веб-сайта, следующая программа изменит размер этого изображения до фиксированной ширины и высоты изображения (100 x 100).

mkyong.jpg (640 x 310) — 46 КБ

2. Исходный код

ImageTest.java


import java.awt.AlphaComposite;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

/*
* @author mkyong
*
*/
public class ImageTest {

private static final int IMG_WIDTH = 100;
private static final int IMG_HEIGHT = 100;

public static void main(String [] args){

try{

BufferedImage originalImage = ImageIO.read(new File("c:\image\mkyong.jpg"));
int type = originalImage.getType() == 0? BufferedImage.TYPE_INT_ARGB : originalImage.getType();

BufferedImage resizeImageJpg = resizeImage(originalImage, type);
ImageIO.write(resizeImageJpg, "jpg", new File("c:\image\mkyong_jpg.jpg"));

BufferedImage resizeImagePng = resizeImage(originalImage, type);
ImageIO.write(resizeImagePng, "png", new File("c:\image\mkyong_png.jpg"));

BufferedImage resizeImageHintJpg = resizeImageWithHint(originalImage, type);
ImageIO.write(resizeImageHintJpg, "jpg", new File("c:\image\mkyong_hint_jpg.jpg"));

BufferedImage resizeImageHintPng = resizeImageWithHint(originalImage, type);
ImageIO.write(resizeImageHintPng, "png", new File("c:\image\mkyong_hint_png.jpg"));

}catch(IOException e){
System.out.println(e.getMessage());
}

}

private static BufferedImage resizeImage(BufferedImage originalImage, int type){
BufferedImage resizedImage = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, type);
Graphics2D g = resizedImage.createGraphics();
g.drawImage(originalImage, 0, 0, IMG_WIDTH, IMG_HEIGHT, null);
g.dispose();

return resizedImage;
}

private static BufferedImage resizeImageWithHint(BufferedImage originalImage, int type){

BufferedImage resizedImage = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, type);
Graphics2D g = resizedImage.createGraphics();
g.drawImage(originalImage, 0, 0, IMG_WIDTH, IMG_HEIGHT, null);
g.dispose();
g.setComposite(AlphaComposite.Src);

g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.setRenderingHint(RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY);
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);

return resizedImage;
}
}

Смотрите результат:

ЧИТАТЬ ТАКЖЕ:  Как установить JAVA_HOME в Windows 10?
JPG (4 КБ) PNG (9 КБ) JPG + Советы (4 КБ) PNG + подсказки (9 КБ)

Заключение

Как видно из изображения с измененным размером, размер файла изображения PNG с измененным размером больше, чем изображения JPEG с измененным размером, но качество PNG лучше, чем у JPG после изменения размера. Подсказки не будут иметь никакого эффекта в формате JPG, однако я не видел никакой разницы между подсказками PNG и PNG +, даже кто-то сказал, что добавление подсказок рендеринга повысит качество изображения?

PS Пожалуйста, поделитесь советами по изображению Java, если вы знаете некоторые 🙂

Рекомендации

  1. http://java.sun.com/j2se/1.4.2/docs/api/javax/imageio/ImageIO.html
  2. http://java.sun.com/j2se/1.4.2/docs/api/java/awt/image/BufferedImage.html
  3. http://java.sun.com/j2se/1.5.0/docs/api/java/awt/Graphics2D.html
  4. http://today.java.net/pub/a/today/2007/04/03/perils-of-image-getscaledinstance.html
  5. http://www.servletsuite.com/servlets/imagescale.htm
  6. http://www.componenthouse.com/article-20

изображение Ява изменить размер изображения

Как изменить размер изображения в Java?

0.00 (0%) 0 votes

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь