这是我在这里问的第一个问题,请原谅我缺乏经验:-)
我有以下文件用于保存图像,然后将文件路径/URL返回给我:
import os, requests
import secrets
from PIL import Image
from flask import url_for, current_app
def save_picture(google_url):
random_hex = secrets.token_hex(8)
i = Image.open(requests.get(google_url, stream=True).raw)
f_ext = (i.format).lower()
picture_fn = random_hex + f_ext
picture_path = os.path.join(current_app.root_path, 'static/experience_images', picture_fn)
output_size = (600, 600)
i.thumbnail(output_size)
i.show()
i.save(picture_path)
return picture_fn
我得到以下错误
raisevalueerror(“未知文件扩展名:{}.format(ext))
google_url
参数是从googleplacesapi获取图像的api URL。下面当我调用i.show()
时,图像会打开,这样我就知道图像正在通过,并且我可以看到在大多数情况下(虽然不一定全部)它会返回一个PNG或JPEG文件。我认为问题是我实际上没有从i
获得任何文件名,我假设这是因为它是一个tempfile。你知道吗
任何帮助都将不胜感激,我是Python的新手。你知道吗
好吧,我想了个解决办法。如果别人有更好的解决办法,我洗耳恭听。你知道吗
基本上,问题是当我使用
i.format
获取文件扩展名类型时,“.PNG”中没有包含“.”。所以文件名类似于“filenamepng”,而不是“filenamepng”文件名.png'. 你知道吗所以现在在用
我创建文件名时使用
现在一切似乎都正常了:-)多亏了DrD,我在整理一个示例代码片段供您试用的同时发现了这个问题。你知道吗
现在完成的代码如下:
这是一个猜测,因为我没有一个googleplaces帐户,但是:通常,HTTP响应将声明它们在content-type头中包含的数据类型。你知道吗
标头的值可能如下所示
还是这个
标准库中的mimetypes模块包含从这个头值派生扩展名的工具。所以你可以这样做:
根据PILdocumentation,格式字符串在某些情况下可能是None。(如果你能发布一个完整的例子,我可以在笔记本上运行和玩,如果我使用一个随机的图像URL,它基本上是工作的,这将是很有帮助的。)
提供一个默认格式(.jpg?) f_ext=(i.format).lower(),如果i.format不是None-else'.jpg' 对于那些案子,但这里有点猜测。。。你知道吗
相关问题 更多 >
编程相关推荐