提供从 firebase 生成的图像

问题描述 投票:0回答:1

我正在使用 firebase 开发一个简单的网络应用程序。

本质上,我想做到这一点,以便每当用户访问页面时,它都会为他们提供带有网址文本的图像:

例如

mywebpage.com/happy_birthday/hannah.jpg
,将为用户提供一个简单的图像,它会获取我存储在存储中的图像并在其上写入名称“hannah”。

我可以轻松地使用 PIL 修改图像,但我不确定如何将其提供给用户,而无需预先上传所有内容。

@https_fn.on_request(cors=options.CorsOptions(cors_origins="*", cors_methods=["get", "post"])):
def rss_image(req: https_fn.Request) -> https_fn.Response:
    return https_fn.Response(make_birthday_image(), mimetype='image/jpg')

from PIL import Image, ImageDraw

def make_birthday_image(name):
    image = Image.new('RGB', (100, 100), color='white')
    draw = ImageDraw.Draw(image)
    draw.text(name, font_size=10, fill='black')
    ... # unsure what to return here

任何建议都会非常有帮助!

python firebase image python-imaging-library
1个回答
0
投票

您可以使用

io.BytesIO
在内存中创建
file-like object
,将图像保存在该对象中并将该对象发送到浏览器。您可以在可能的问题中看到如何在 Flask 中服务器图像而不保存在磁盘上

所以你可能需要这样的东西

from PIL import Image, ImageDraw
import io

def make_birthday_image(name):
    image = Image.new('RGB', (100, 100), color='white')
    draw = ImageDraw.Draw(image)
    draw.text(name, font_size=10, fill='black')
    ... # unsure what to return here

    obj = io.BytesIO()             # file in memory to save image without using disk  #
    image.save(obj, format='jpg')  # save in file (BytesIO)                           # https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL.Image.Image.save
    obj.seek(0)                    # move to beginning of file (BytesIO) to read it   #
    #obj = obj.getvalue()          # if you need data instead of file-like object

    return obj
© www.soinside.com 2019 - 2024. All rights reserved.