用 FaaS 实现比优图更灵活的大量图片快速加工能力

2018-01-02 18:04:13 浏览数 (1)

背景

前几天有个朋友的一个公益策划不小心泄漏后,实在在太火,在朋友圈刷屏了,导致后台服务器的处理能力成为瓶颈,不得不临时扩容了数十台服务器来处理大量的图片。和他们CTO聊了一下,原来为了保证被分享到朋友圈的每个捐款图片都独立可追踪,他们采用了临时合成带有动态二维码和用户昵称的朋友圈分享图片。这样每当有一个人分享到朋友圈的时候,服务器就要临时计算一个二维码并且把它叠加到一张已有的图片上面,因此服务器成为了性能瓶颈。

其实像这样的大量图片的规则化加工,最好是由优图这样的海量图片处理平台来服务,但是叠加动态二维码这个需求太特殊了,之前并没有人提出来过,所以优图目前只能做到把一张已有的图片作为水印叠加到另一张图片里面去,还做不到动态的生成二维码并立刻叠图。

在云时代,发现一个这样的市场需求,正确的打开姿势肯定不是去找优图团队提需求,等下一次版本迭代,而是通过腾讯云函数的能力自己写非常少的几行代码,实现一个比优图更加个性化的,同时和优图一样具有强大的批量处理能力的服务。

如何做

1. 为了偷懒,我们直接进入腾讯云实验室 https://cloud.tencent.com/developer/labs/lab/10172 开始一个新实验。

2. 在“在虚拟环境下安装 Pillow 和 COS SDK”这一步,多执行一个安装qr支持包的操作

代码语言:bash复制
pip install qrcode

3. 在thumbnail.py文件中,在最前面加一行

代码语言:python代码运行次数:0复制
import qrcode

并把图片处理函数 resize_image 略作修改,插入空行分割的几行(如果不需要压缩图片 image.thumbnail 那一行也可以删掉)

代码语言:python代码运行次数:0复制
def resize_image(image_path, resized_path):
    with Image.open(image_path) as image:
    
        image.thumbnail(tuple(x / 2 for x in image.size))
        qrimage = qrcode.make('Some data here')
        box = (1,1,289,289)
        region = qrimage.crop(box)
        image.paste(region,box)
        
        image.save(resized_path)

4. 其他操作原封不动按照实验室的指引操作,完成实验

好了,现在我们得到了一个可以往自己的图片上动态叠加自己的二维码生成一个新图片的云函数。

示例效果示例效果

除了实验室已经做好的全部程序,一共只需要敲 6 行 shell 和 python 代码,就可以开始爽起来了!

0 人点赞