-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
Description
S3+Lambda实现图片压缩✍
需求背景
- 为优化小程序瀑布流体验,需要压缩图片且获取图片宽高。
- 公司使用的是AWS,并非阿里云...所以需要自行设计实现压缩图逻辑...
实现思路
方案一
压缩
使用S3存储图片,触发Lambda函数根据需求进行压缩
尺寸读取
上传时用**程序脚本读取尺寸,将尺寸重命名进文件。**与前端约定命名规范,本文规则采用图片名_宽_ 高.扩展名的形式
存储
S3中,除了原图目录外,需要新增压缩图目录。压缩图目录命名采用原图目录_压缩尺寸,便于前端获取。
将上传完毕后S3返回的存储地址储存在MySQL中,压缩图地址通过替换目录实现,或者也存入MySQL中,随用随取。
方案二
上传时只存储原图。前端如果需要压缩图,再根据前端需求实时压缩返回,并存到压缩图目录,便于下次获取。
此方式优点是不占用服务器资源,用的时候再压缩,可支持多种尺寸。缺点是处理压缩占用时间长。
综上所述,采用方案一结合方案二的方式去做。将主流尺寸提前处理,同时支持非主流尺寸实时处理。
背景知识✍
S3的使用
S3是什么?
S3上传的Nodejs实现
图片上传与尺寸信息获取
Lambda 函数的配置与使用
图片压缩原理
Q&A✍
为什么要获取图片尺寸?
为什么不用微信提供的wx.getImageInfo API 获取图片宽高信息?
wx.getImageInfo需要将图片下载到本地,即使用并发也会产生时间消耗。所以采用后端获取尺寸传递给前端的方式。