java - 在java中更改图像大小
问题描述
我需要将图像大小调整为 100*100 纵横比才能创建图标。我正在使用java.awt.Graphics2D
相同的。
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;
public class FileResizeService {
public File resizeImage(File file, String fileExtension) throws IOException {
int imageWidth=100;
int imageHeight=100;
BufferedImage originalImage = ImageIO.read(file);
int type = originalImage.getType() == 0 ? BufferedImage.TYPE_INT_ARGB : originalImage.getType();
BufferedImage drawImage = drawImage(originalImage, type, imageWidth, imageHeight);
ImageIO.write(drawImage, fileExtension, file);
return file;
}
private BufferedImage drawImage(BufferedImage originalImage, int type, int imageWidth, int imageHeight) {
BufferedImage resizedImage = new BufferedImage(imageWidth, imageHeight, type);
Graphics2D g = resizedImage.createGraphics();
g.drawImage(originalImage, 0, 0, imageWidth, imageHeight, 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;
}
}
上面的代码将大小为5mb的高分辨率图像调整为100*100纵横比的图像,但图像大小仍然保持不变(即在本例中为5mb),这对于图标来说太大了。我希望调整大小的图像以千字节为单位。
我错过了什么吗?
解决方案
推荐阅读
- excel - Excel:复制到另一张表并在现有值下过去
- html - jQuery - 点击事件只触发一次
- python - 过滤numpy数组
- macos - `ls:在管道命令中没有这样的文件或目录`,但在 shell 中工作正常
- java - 使用 Scala IO 实现的 JVM 上的 Fiber
- android - 接收广播意图时出错 (act=com.google.android.gms.auth.phone.SMS_RETRIEVED)
- python - 添加一个类别变量,为每条街道 10m 的每个路段提供唯一的 id
- python - Tensorflow 中 Flatten() 层中输入和输出形状的问题
- javascript - 使用带有哈希路由的后退按钮关闭模式
- darknet - 在没有 OpenCV 和 CUDA 的 Windows 10 上安装 Darknet(自己的设备上没有 GPU):问题