评论系统生成缩略图的思考

评论系统需要对接多个网站,每个网站对评论里的图片的尺寸有不同的要求,并且为了在 amp 应用里可以正常显示,需要额外返回图片的宽度和高度

现在需要解决两个问题:

1. 之前的接口数据里没有图片的宽度和高度属性

2. 每个网站对图片尺寸有不同要求

对于第一个问题:

之前保存图片信息的方案很简单,只是把图片路径用”,”拼接起来,保存在数据库里;返回给前端时,把image字符串用”,”分割后简单处理即可

对于现在的新情况,这个方案明显不适用。

新方案:

为了避免每次请求都去从文件里读取图片的宽和高,需要将图片的宽和高保存起来,这里创建一个 MySQL 表来保存图片路径、宽度、高度等信息;实现的时候,需要考虑新旧数据的转换问题

对于第二个问题:

最简单的方法是为每个图片生成所有规格的缩略图,然后在 api 里返回所有的缩略图url

对于现在的新情况,这个方案也有明显的缺点:

假如图片规格特别多,为每个图片生成所有规格的缩略图,会浪费大量存储空间,生成大量无用的缩略图耗费服务器资源,前端返回的无用数据太多

新方案:

评论系统的前端展示,只需要两种图片:缩略图和大图,所以我决定给 app (一个网站就是一个app)添加两个字段来保存缩略图和大图的规格,具体细节如下:

1. app 新增两个图片规格参数: thumbnail size 和 big image size

2. thumbnail size 默认值为 100×100, big image size 默认值为 1000×1000

3. 前端接口将只返回 thumbnail size 和 big image size的图片url

4. 为了兼容性,前端接口的字段保持不变: images 字段对应 big image size 的图片, thumbnails 字段对应 thumbnail size 的图片

5. 为接口添加版本号参数 ver, 当ver为新的时, images 和 thumbnails 字段采用新的格式: [{‘width’: 100, ‘height’: 100, ‘src’:’xxx.jpg’}],其中 width 是图片的宽度,height 是图片的高度,src是图片的url