当前位置: 首页 > news >正文

文件上传优化(图片压缩)

图片压缩

对于图库网站来说,图片压缩是图片优化中最基本且最重要的操作,能显著减少图片文件的大小,从而减低带宽使用和流量消耗,大幅度降低成本的同时,提高图片加载速度。

有哪些压缩图片的方法呢?

  1. 将图片格式转换为体积更小的格式,比如 Webp 或其他格式
  2. 对图片质量进行压缩
  3. 缩小图片尺寸

当然对于图片网站来说,我们希望可能不要影响图片的质量,因此更推荐第一种方法。

图片压缩格式

格式上,有两种选择:

1)Webp:由 Google 开发的现代图片格式,支持有损和无损压缩。相比传统格式:

  • 比 PNG 文件小约 26%
  • 比 JPEG 文件小约 25%~34%
  • 支持透明背景
  • 兼容性:大部分主流浏览器均已支持 Webp

2)AVIF:基于 AV1 视频编码技术的图片格式,压缩率更高。

  • 比 Webp 的文件大小更小,画质更优。
  • 支持透明背景和高动态范围(HDR)

虽然 AVIF 看起来更牛,但目前其兼容性没有 Webp 好,为了保证图片在不同浏览器都能正常加载,建议选择 Webp 格式。

图片压缩方案

跟解析图片的操作一样,可以使用本地的图像处理类库自行操作,也可以利用第三方云服务完成。

因为我们图片已经上传到了腾讯云COS 对象存储服务,可以直接利用数据万象服务。通过配置图片处理规则,在图片上传的同时自动进行压缩处理,减少开发成本。

  1. 访问图片时实时压缩
  2. 上传图片时实时压缩(√)
  3. 已上传图片压缩

对于我们的需求,要将图片格式转化为 Webp,在上传文件时,传入 Rules 规则。使用 HTTP API调用时,传入处理规则参数:

后端开发

为了实现方便,我们此处仅对文件格式进行转化,不进行质量变换之类的其他处理。

1)修改 CosManage 上传图片的方法,将图片后缀转为 webp,并且使用数据万象将图片格式转为 webp

   public PutObjectResult putPictureObject(String key, File file) {PutObjectRequest putObjectRequest = new PutObjectRequest(cosClientConfig.getBucket(), key,file);// 对图片进行处理(获取基本信息也被视作为一种处理)PicOperations picOperations = new PicOperations();// 1 表示返回原图信息picOperations.setIsPicInfo(1);List<PicOperations.Rule> rules = new ArrayList<>();//图片压缩(转成 webp 格式)String webpKey = FileUtil.mainName(key) + ".webp";PicOperations.Rule compressRule = new PicOperations.Rule();compressRule.setRule("imageMogr2/format/webp");compressRule.setBucket(cosClientConfig.getBucket());compressRule.setFileId(webpKey);rules.add(compressRule);// 构造处理参数picOperations.setRules(rules);putObjectRequest.setPicOperations(picOperations);return cosClient.putObject(putObjectRequest);}

2)修改 PictureUploadTemplate 上传图片的方法,从图片处理结果中获取到缩略图,并设置到返回结果中

  //获取图片处理结果ProcessResults processResults = putObjectResult.getCiUploadResult().getProcessResults();List<CIObject> objectList = processResults.getObjectList();if(CollUtil.isNotEmpty(objectList)){CIObject compressedCiObject = objectList.get(0);//封装压缩图返回结果return buildResult(originFilename,compressedCiObject);}
测试

节约了稍微一点空间吧~

相关文章:

  • 【StarRocks系列】join查询优化
  • 从0开始学习R语言--Day28--高维回归
  • Keil 安装 CMSIS-FreeRTOS 失败解决方案
  • ByteMD Markdown编辑器详细解释修改编辑器默认样式(高度300px)
  • 张之瞳全新单曲《6:30am》上线:以音乐定格青春遗憾中的诗意守望
  • 【知识图谱提取】【阶段总结】【LLM4KGC】LLM4KGC项目提取知识图谱推理部分
  • Qt 连接信号使用lambda表达式和槽函数的区别
  • vue3+arcgisAPI4案例:智慧林业资源监测分析平台(附源码下载)
  • SQLite 数据库操作完整指南
  • 怎么在word中对论文图片、公式进行编号、引用
  • 人形机器人_双足行走动力学:本田机械腿的倒立摆模型
  • 信息论复习-期末自用
  • 跨平台常见RTSP播放器选型全解析
  • 小程序右上角○关闭事件
  • 湖北理元理律师事务所债务优化方案:平衡还款与生活的法律实践
  • 在AI普及的大环境下神经网络在新能源汽车热管理系统中的应用简介
  • React JSX原理
  • Qt/C++应用:防御性编程完全指南
  • 【基础算法】贪心 (一) :简单贪心
  • Linux致命漏洞CVE-2025-6018和CVE-2025-6019
  • 静态网站模板 大气/百度营销登录入口
  • 关于做好学院网站建设的要求/seo关键词快速提升软件官网
  • 网站首页空白 wordpress/企业建站
  • 做设计用图片的网站/小程序商城
  • 政务网站集约化建设推进情况/百度seo如何优化关键词
  • 营销型网站建设的关键特点/网络舆情应急预案