Python Pillow 不适用于某些图像
Python Pillow doesn't work with some images
我有 30 000 张图片要检查大小、格式和其他一些东西。
除了 200 张图像,我已经检查了所有这些。这 200 张图片在 Pillow
中给出了一个错误
from PIL import Image
import requests
url = 'https://img.yakaboo.ua/media/wysiwyg/ePidtrymka_desktop.svg'
image = Image.open(requests.get(url, stream=True).raw)
这给出了错误:
PIL.UnidentifiedImageError: cannot identify image file <_io.BytesIO object at 0x7fbfbf59c810>
这里有一些其他图片,也有同样的错误:
https://www.yakaboo.ua/ua/skin/frontend/bootstrap/yakaboo/images/logo/y-logo.png
https://img.yakaboo.ua/media/wysiwyg/ePidtrymka_desktop.svg
https://img.yakaboo.ua/media/wysiwyg/ePidtrymka_desktop_futer.svg
https://www.yakaboo.ua/ua/skin/frontend/bootstrap/yakaboo/images/icons/googleplay.png
https://www.yakaboo.ua/ua/skin/frontend/bootstrap/yakaboo/images/icons/appstore.png
如果我下载这些图像 - 一切正常。但是我需要在不下载的情况下检查它们。有什么解决办法吗?
- 您没有检查可能从
requests
响应中得到的任何错误,因此您可能正在尝试识别例如一个错误页面。
- Pillow 不支持 SVG 文件(而且它们不一定具有固有大小)。您需要其他东西来识别它们。
- 您明确要求请求为您提供
raw
流,而不是诸如如果有传输编码,则解压缩。对于那个 y-logo.png
,服务器响应具有 Content-Encoding: gzip
的响应,所以难怪您遇到困难。您可能不想使用 stream=True
和 .raw
,而是将响应读入内存,用 io.BytesIO(resp.content)
包装并将其传递给 Pillow。如果那不是一个选项,您也可以围绕请求响应编写一个 file-like 包装器,但这可能不值得付出努力。
- 要节省大量时间(通过重用连接),请使用请求会话。
我有 30 000 张图片要检查大小、格式和其他一些东西。
除了 200 张图像,我已经检查了所有这些。这 200 张图片在 Pillow
中给出了一个错误from PIL import Image
import requests
url = 'https://img.yakaboo.ua/media/wysiwyg/ePidtrymka_desktop.svg'
image = Image.open(requests.get(url, stream=True).raw)
这给出了错误:
PIL.UnidentifiedImageError: cannot identify image file <_io.BytesIO object at 0x7fbfbf59c810>
这里有一些其他图片,也有同样的错误:
https://www.yakaboo.ua/ua/skin/frontend/bootstrap/yakaboo/images/logo/y-logo.png
https://img.yakaboo.ua/media/wysiwyg/ePidtrymka_desktop.svg
https://img.yakaboo.ua/media/wysiwyg/ePidtrymka_desktop_futer.svg
https://www.yakaboo.ua/ua/skin/frontend/bootstrap/yakaboo/images/icons/googleplay.png
https://www.yakaboo.ua/ua/skin/frontend/bootstrap/yakaboo/images/icons/appstore.png
如果我下载这些图像 - 一切正常。但是我需要在不下载的情况下检查它们。有什么解决办法吗?
- 您没有检查可能从
requests
响应中得到的任何错误,因此您可能正在尝试识别例如一个错误页面。 - Pillow 不支持 SVG 文件(而且它们不一定具有固有大小)。您需要其他东西来识别它们。
- 您明确要求请求为您提供
raw
流,而不是诸如如果有传输编码,则解压缩。对于那个y-logo.png
,服务器响应具有Content-Encoding: gzip
的响应,所以难怪您遇到困难。您可能不想使用stream=True
和.raw
,而是将响应读入内存,用io.BytesIO(resp.content)
包装并将其传递给 Pillow。如果那不是一个选项,您也可以围绕请求响应编写一个 file-like 包装器,但这可能不值得付出努力。 - 要节省大量时间(通过重用连接),请使用请求会话。