图片的缩放是在内存中进行完成的,用到了BufferedImage中的方法(
getScaledInstance
)生成缩放的图片;其中方法中需要传递一个图片压缩算法,Image中提供的图片压缩算法一共包含以下几类:
- Image.SCALE_DEFAULT:默认的缩放算法
- Image.SCALE_FAST:缩放速度优先
- Image.SCALE_SMOOTH:图像平滑度优先
- Image.SCALE_REPLICATE:使用 ReplicaScaleFilter 类中体现的图像缩放算法
- Image.SCALE_AREA_AVERAGING:使用面积平均图像缩放算法
下面我们结合上面的描述,写一个图片压缩的方法:
/**
* 按照高度进行缩放
* @param bufferedImage 内存图片
* @param targetHeight 目标高度
* @return 内存图片
*/
private BufferedImage zoom(BufferedImage bufferedImage, int targetHeight) {
// 获取原始图片的宽度和高度
int width = bufferedImage.getWidth();
int height = bufferedImage.getHeight();
// 计算目标图片的宽度
int targetWidth = width * targetHeight / height;
// 创建新的内存图片
BufferedImage newBufferedImage = new BufferedImage(targetWidth, targetHeight, bufferedImage.getType());
// 创建画图对象
Graphics2D graphics = newBufferedImage.createGraphics();
// 获取缩略图片并画到画布上
graphics.drawImage(bufferedImage.getScaledInstance(targetWidth, targetHeight, Image.SCALE_FAST), 0, 0, null);
// 关闭画图对象
graphics.dispose();
return newBufferedImage;
}
有了图片压缩的方法,我们结合ImageIO提供的工具类就可以完成一个图片缩略图的生成,具体的代码如下:
// 读取图片到内存
BufferedImage bufferedImage = ImageIO.read(new File("/home/mointor/mobile.png"));
// 压缩图片
BufferedImage newBufferedImage = zoom(bufferedImage, 100);
// 写出图片到文件
ImageIO.write(newBufferedImage, "png", new File("/home/mointor/mobile2.png"));
以上就完成了图片缩略图的生成。
版权声明:本文为m1729339749原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。