我正在使用 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
任何建议都会非常有帮助!
您可以使用
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