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

简介: 在开发过程中,图片是必不可少的,除了图片的上传下载以外,图片压缩也是很常见的。 下面我们来看看hutool工具类里图片压缩的方法。


微信截图_20220531133417.png

前言

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

压缩效果,最基础的压缩能够压缩一半大小,图片依然很清晰微信截图_20220531140316.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);
}
复制代码

小结

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

目录
相关文章
|
7月前
|
算法 Java 调度
死锁预防与解决方案
死锁预防与解决方案
|
7月前
|
前端开发 安全 JavaScript
有哪些常见的前端问题和解决方案
【4月更文挑战第13天】前端开发常见问题及解决方案:页面渲染性能优化(减少重绘、回流,利用GPU加速,代码拆分)、响应式设计(媒体查询、弹性布局)、浏览器兼容性(使用前缀,兼容性库,浏览器嗅探)、事件处理(事件委托、防抖节流)、代码组织(模块化、构建工具)、安全性(输入验证、HTTPS、安全HTTP头)和资源加载(CDN、资源优化、错误处理)。
579 6
|
存储 编解码 监控
报告厅解决方案
大型单位、企业都建有报告厅,单位搭建报告厅的目的是为了召开各类会议、学术讨论、演讲、报告、新闻发布、多媒体教学培训、观看电影等活动提供卓越的音质效果、清晰的画面显示以及简单便捷的集中控制。报告厅通常会涉及举办活动时将现场画面的保存记录、活动画面以直播的形式在报告厅之外的其他屏幕上观看(因为报告厅容纳人数有限的原因)。针对这两个需求我们做了以下解决方案
|
Java
开发中遇到的问题&解决方案(八)
以前的一个老项目里使用过ZXing进行会员和门店二维码的生成操作,当时出现过Java版本升级后不兼容的问题,很是麻烦,于是替换成了hutool里的二维码生成,下面我们来看看具体的实现。
206 0
开发中遇到的问题&解决方案(八)
|
JSON 自然语言处理 Java
开发中遇到的问题&解决方案(十)
我们在开发中一般遇到会对于敏感词的过滤或者屏蔽,因为之前做过社区类的APP,在这方面也踩了不少的坑,算是也积累了一点点的经验,那么今天我们来看看hutool里对于敏感词的一些操作,工具类SensitiveUtil()
405 0
开发中遇到的问题&解决方案(十)
|
设计模式 前端开发 Java
开发中遇到的问题&解决方案(一)
在开发过程在我们往往会遇到很多的开发阻碍或者因为原生框架的不支持导致的一系列问题或者有的不是问题,是我们使用普通的大量的复制粘贴改改就能用的代码去实现功能,这样使得代码很冗余,我们能不能去尝试找一些好的方案比如采用设计模式这些去优化我们的代码,实现代码简洁明了,易扩展呢?答案是肯定的。这个系列文章会使用案列加解决方案的形式为大家讲解,那下面我们开始吧。
760 0
开发中遇到的问题&解决方案(一)
开发中遇到的问题&解决方案(四)
今天继续hutool工具类的认识,废话不多说下面直接进入主题。
320 0
开发中遇到的问题&解决方案(四)
|
SQL NoSQL Oracle
开发中遇到的问题&解决方案(二)
一个软件系统最重要的是什么?毫无疑问是数据,那什么是数据的'运载体',什么作为后端与数据库的桥梁和沟通者呢,是SQL。我是Java开发出身,大学课程当时学习的是SQL Server,而且后面工作中实际用到过Oracle,DB2以及使用的最普遍的My SQL,至于No SQL 这一类下的常用的就是Redis和MongoDB了,这些后面再详细举例说明。今天讲的案列与表情相关,那么接下来进入今天的主题。
176 0
开发中遇到的问题&解决方案(二)
|
Java Linux 数据安全/隐私保护
开发中遇到的问题&解决方案(六)
之前的项目里有用到FTP,需要使用FTP把图片及一些必要文件上传到第三方的FTP服务器上,所以会涉及FTP连接,创建用户,创建文件夹,文件上传等,项目里选用的还是hutool包装的FTP工具类,下面来看看这些功能的在hutool里是怎么包装的。
547 0
开发中遇到的问题&解决方案(六)
|
安全 机器人 数据安全/隐私保护
开发中遇到的问题&解决方案(九)
在我们的系统里验证码是必不可少的,比如注册登录时,忘记密码时,设置支付密码时或者支付下单时,那验证码的作用在哪里呢?其实就一条为了防止来着黑客和机器人恶意的攻击,那么下面我们来看看hutool里验证码工具类。
273 0
开发中遇到的问题&解决方案(九)