问题
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