3 回答

TA貢獻1906條經驗 獲得超10個贊
這是一個猜測,因為我沒有 Google Places 帳戶,但是:通常,HTTP 響應將聲明它們包含在內容類型標頭中的數據類型。
標頭的值可能如下所示
"image/jpeg"
或這個
"image/jpeg; charset=UTF-8"
標準庫中的mimetypes模塊包含從該標頭值派生擴展的工具。所以你可以做這樣的事情:
import mimetypes
import requests
def save_picture(google_url):
response = requests.get(google_url, stream=True)
content_type = response.headers['content-type'] # 'image/jpeg; charset=UTF-8'
mimetype, _, _ = content_type.partition(';') # 'image/jpeg'
f_ext = mimetypes.guess_extension(mimetype) # '.jpg'
random_hex = secrets.token_hex(8)
i = Image.open(response.raw)
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

TA貢獻1853條經驗 獲得超9個贊
好的,所以我想出了一個解決方案。如果其他人有更好的解決方案,我會全力以赴。
基本上,問題似乎是當我使用i.format它獲取文件擴展名類型時不包含“?!?在“.PNG”中。所以文件名類似于“filenamepng”而不是“filename.png”。
所以現在在獲得文件擴展名之后
f_ext = i.format
我創建文件名
picture_fn = random_hex + '.' + f_ext
現在一切似乎都正常了 :-) 感謝 DrD,我在整理一個示例代碼片段供您試用時發現了這一點。
現在完成的代碼如下:
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.save(picture_path)
return picture_fn
添加回答
舉報