微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何让 GCP 函数生成的图像在 GC 存储中被识别为有效?

如何解决如何让 GCP 函数生成的图像在 GC 存储中被识别为有效?

我正在尝试使用 python 创建一个图像缩略图创建函数,在谷歌云平台的函数中运行。图像作为 base64 字符串发送到云函数,使用 Python 的 Pillow 包进行操作和缩小。然后将其作为图像上传,从 Pillow Image 对象到 BytesIO 对象,然后保存到谷歌云存储。一切顺利。

这里的问题很奇怪:在手动创建访问令牌之前,Google Cloud Storage 无法识别图像。否则,图片会无限循环,永远无法加载,永远无法使用。

我已经查看了 this SO post,它有一个与我非常相似的问题(这里的图像正好显示了我的问题:无法正确加载上传文件),但它在两个重要类别中有所不同:1)它们是直接操作图像数组,而我的代码从未触及它,并且 2) 它们在 Node.js 中工作,其中 Firebase SDK 与 Python 不同。

生成图片代码如下:

def thumbnailCreator(request):
    # Setting up the resourcse we are going to use
    storage_client = storage.Client()
    stor_bucket = storage_client.bucket(BUCKET_LINK)

    # Retriving the Data
    sent_data = request.get_json()['data']
    name = sent_data['name']
    userID = sent_data['userID']

    # Process to go between base64 string to bytes,to a file object 
    imageString = stor_bucket.blob(PATH_TO_FULL_SIZE_IMAGE).download_as_string()
    
    imageFile = BytesIO(imageString)
    image = Image.open(imageFile)

    # Resizing the image is the goal 
    image = image.resize(THUMBNAIL_SIZE)

    # Go between pillow Image object to a file
    imageFile = BytesIO()
    image.save(imageFile,format='PNG')
    imageBytes = imageFile.getvalue()
    image64 = base64.b64encode(imageBytes)
    imageFile.seek(0)


    # Uploading the Data 
    other_blob = stor_bucket.blob(PATH_FOR_THUMBNAIL_IMAGE)
    other_blob.upload_from_file(imageFile,content_type = 'image/png')

    return {'data': {'response': 'ok','status': 200}}

再次,这有效。我感觉 MIME 类型有问题。在这种类型的编程/网络/图像处理方面,我是新手,所以我一直在寻找更好的方法来做到这一点。无论如何,感谢您的任何帮助。

解决方法

看来这个问题的前提 - 必须手动制作访问令牌才能使图像工作 - 不准确。经过进一步测试,错误来自我正在使用的代码库的其他部分。上面的 python 脚本确实适用于图像处理。可以通过代码生成图像的访问令牌,并在客户端提供。

如果有人在将来需要在 Google Cloud Platform 中使用 Pillow/PIL 时偶然发现它,请留下它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?