Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

基于AWS 的图片处理系统设计✍ #11

Open
lingxyz opened this issue Sep 16, 2020 · 0 comments
Open

基于AWS 的图片处理系统设计✍ #11

lingxyz opened this issue Sep 16, 2020 · 0 comments
Labels

Comments

@lingxyz
Copy link
Owner

lingxyz commented Sep 16, 2020

S3+Lambda实现图片压缩✍

需求背景

  1. 为优化小程序瀑布流体验,需要压缩图片且获取图片宽高。
  2. 公司使用的是AWS,并非阿里云...所以需要自行设计实现压缩图逻辑...

实现思路

方案一

压缩

使用S3存储图片,触发Lambda函数根据需求进行压缩

尺寸读取

上传时用**程序脚本读取尺寸,将尺寸重命名进文件。**与前端约定命名规范,本文规则采用图片名_宽_ 高.扩展名的形式

存储

S3中,除了原图目录外,需要新增压缩图目录。压缩图目录命名采用原图目录_压缩尺寸,便于前端获取。

将上传完毕后S3返回的存储地址储存在MySQL中,压缩图地址通过替换目录实现,或者也存入MySQL中,随用随取。

方案二

上传时只存储原图。前端如果需要压缩图,再根据前端需求实时压缩返回,并存到压缩图目录,便于下次获取。

此方式优点是不占用服务器资源,用的时候再压缩,可支持多种尺寸。缺点是处理压缩占用时间长。

综上所述,采用方案一结合方案二的方式去做。将主流尺寸提前处理,同时支持非主流尺寸实时处理

背景知识✍

S3的使用

S3是什么?

S3上传的Nodejs实现

图片上传与尺寸信息获取

Lambda 函数的配置与使用

图片压缩原理

Q&A✍

为什么要获取图片尺寸?

为什么不用微信提供的wx.getImageInfo API 获取图片宽高信息?

wx.getImageInfo需要将图片下载到本地,即使用并发也会产生时间消耗。所以采用后端获取尺寸传递给前端的方式。

为什么用lambda不用S3 tag?

lambda处理图片是异步的吗?产生的时间差对前端影响有什么影响?

图片扩展名对压缩有影响吗?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant