Skip to content

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

Description

@lingxyz

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处理图片是异步的吗?产生的时间差对前端影响有什么影响?

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions