我有 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)
包装它并将其传递给枕头。如果这不是一个选择,您也可以在请求响应周围编写一个类似文件的包装器,但这可能不值得付出努力。 - 要节省大量时间(通过重用连接),请使用请求 session 。
关于Python Pillow 不适用于某些图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72448887/