使用Python37运行时使用Cloud Functions生成缩略图

时间:2018-08-16 22:09:00

标签: python-3.x image firebase google-cloud-functions firebase-storage

我有一个由Firebase Storage触发的Google Cloud Function,我想生成缩略图。

尽管Node.js文档有一个example that uses ImageMagick,但python运行时却没有这样的版本。

考虑性能的可接受方法是什么? Pillow-SIMD是否可以在云功能中工作?

或者我应该使用App Engine生成缩略图并使用Images service吗?

2 个答案:

答案 0 :(得分:3)

您可以使用wand(绑定到ImageMagick的图片)和google-cloud-storage来将图像上传到存储桶后自动调整其大小。

requirements.txt中:

google-cloud-storage
wand

main.py中:

from wand.image import Image
from google.cloud import storage

client = storage.Client()

PREFIX = "thumbnail"


def make_thumbnail(data, context):
    # Don't generate a thumbnail for a thumbnail
    if data['name'].startswith(PREFIX):
        return

    # Get the bucket which the image has been uploaded to
    bucket = client.get_bucket(data['bucket'])

    # Download the image and resize it
    thumbnail = Image(blob=bucket.get_blob(data['name']).download_as_string())
    thumbnail.resize(100, 100)

    # Upload the thumbnail with the filename prefix
    thumbnail_blob = bucket.blob(f"{PREFIX}-{data['name']}")
    thumbnail_blob.upload_from_string(thumbnail.make_blob())

然后您可以使用gcloud工具进行部署:

$ gcloud beta functions deploy make_thumbnail \
    --runtime python37 \
    --trigger-bucket gs://[your-bucket-name].appspot.com

答案 1 :(得分:0)

我错误地认为,使用Python运行时时没有在Google Cloud Function环境中安装ImageMagick,因为未记录该文件。

但实际上是以下云功能:

import wand.version


def cloud_function(request):
    print(wand.version.MAGICK_VERSION)

输出ImageMagick 6.9.7-4 Q16 x86_64 20170114 http://www.imagemagick.org