Generating thumbnails with Cloud Functions using the Python37 runtime

筅森魡賤 提交于 2021-02-10 04:21:55

问题


I have a Google Cloud Function triggered by Firebase Storage, and I want to generate thumbnails.

While the Node.js docs have an example that uses ImageMagick there is no such equivalent for the python runtime.

What would be an acceptable approach keeping performance in mind ? Would Pillow-SIMD work in a cloud function ?

Or should I go App Engine for thumbnail generation and use the Images service ?


回答1:


You can use wand, a binding to ImageMagick, along with google-cloud-storage to resize an image automatically once it's uploaded to a storage bucket.

In requirements.txt:

google-cloud-storage
wand

In 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())

Then you can deploy it with the gcloud tool:

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



回答2:


I assumed wrongly that ImageMagick wasn't installed in the Google Cloud Function environment when using the Python runtime since it was not documented.

But actually it is, the following cloud function :

import wand.version


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

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



来源:https://stackoverflow.com/questions/51885962/generating-thumbnails-with-cloud-functions-using-the-python37-runtime

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!