开发中遇到的问题&解决方案(五)

201 阅读2分钟

「这是我参与2022首次更文挑战的第17天,活动详情查看:2022首次更文挑战

前言

在开发过程中,图片是必不可少的,除了图片的上传下载以外,图片压缩也是很常见的。 下面我们来看看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);

压缩效果,最基础的压缩能够压缩一半大小,图片依然很清晰 Snipaste_2022-02-03_14-55-05.png 具体的原理解读:

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);
}

小结

关于图片缩放的方法,其实大同小异,区别点都是一下参数和小技巧,比如处理图片时填充背景色这种。