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

如果我下载这些图像 - 一切正常。但是我需要在不下载的情况下检查它们。有什么解决办法吗?

  1. 您没有检查可能从 requests 响应中得到的任何错误,因此您可能正在尝试识别例如一个错误页面。
  2. Pillow 不支持 SVG 文件(而且它们不一定具有固有大小)。您需要其他东西来识别它们。
  3. 您明确要求请求为您提供 raw 流,而不是诸如如果有传输编码,则解压缩。对于那个 y-logo.png,服务器响应具有 Content-Encoding: gzip 的响应,所以难怪您遇到困难。您可能不想使用 stream=True.raw,而是将响应读入内存,用 io.BytesIO(resp.content) 包装并将其传递给 Pillow。如果那不是一个选项,您也可以围绕请求响应编写一个 file-like 包装器,但这可能不值得付出努力。
  4. 要节省大量时间(通过重用连接),请使用请求会话。