Skip to content

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

@lingxyz

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

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions