前言
在开发过程中,图片是必不可少的,除了图片的上传下载以外,图片压缩也是很常见的。 下面我们来看看hutool工具类里图片压缩的方法。
一.ImgUtil,主要功能点包含缩放图像、切割图像、旋转、图像类型转换、彩色转黑白、文字水印、图片水印,下面详情看看这些功能 1.普通缩放图像,先在网上找一张图存放到本地,让我们来看看压缩的效果,指标当然是压缩前后的大小比对 代码就一行,0.8f为缩小比例字段。比例大于1时为放大,小于1大于0为缩小,下面演示的是压缩效果
ImgUtil.scale(FileUtil.file("C:/Users/yd/Desktop/test_pic.jpg"), FileUtil.file("C:/Users/yd/Desktop/test_pic_result.jpg"), 0.8f); 复制代码
压缩效果,最基础的压缩能够压缩一半大小,图片依然很清晰
具体的原理解读:
public static void scale(Image srcImg, File destFile, float scale) throws IORuntimeException { Img.from(srcImg).setTargetImageType(FileUtil.extName(destFile)).scale(scale).write(destFile); } 复制代码
1)先将图片文件用流的方式读取出来,然后setTargetImageType方法主要是用于设置处理后的图片
2)这种形式下的缩放后默认为jpeg格式,不关闭流
2.按长宽缩放,这种方法的缩放下目标长宽与原图不成比例会变形,上面1的缩放有可能会导致图片变形,下面来看看代码,参数里多了宽度和长度两个参数
public static Image scale(Image srcImg, int width, int height) { return Img.from(srcImg).scale(width, height).getImg(); } 复制代码
3.如果想缩放前后图片格式及比例不变形可以调用下面这个方法,算是1和2的结合,另外如果无法识别原图片默认JPG格式,而且可以使用fixedColor对处理的图片同时继续背景色填充,在一些场景下非常的实用
public static void scale(File srcImageFile, File destImageFile, int width, int height, Color fixedColor) throws IORuntimeException { Img.from(srcImageFile) .setTargetImageType(FileUtil.extName(destImageFile)) .scale(width, height, fixedColor) .write(destImageFile); } 复制代码
小结
关于图片缩放的方法,其实大同小异,区别点都是一下参数和小技巧,比如处理图片时填充背景色这种。