Python Pillow 不适用于某些图像

标签 python python-imaging-library

我有 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) 包装它并将其传递给枕头。如果这不是一个选择,您也可以在请求响应周围编写一个类似文件的包装器,但这可能不值得付出努力。
  4. 要节省大量时间(通过重用连接),请使用请求 session 。

关于Python Pillow 不适用于某些图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72448887/

相关文章:

python - Pandas 0.15 数据帧 : Remove or reset time portion of a datetime64

python - 使用 PIL 时释放内存

python - 在 python opencv 中从其值(欧氏距离)检索图像

python - 在 Python 中使用 MySQL 和 AWS Lambda 的问题

Python/Tkinter - 标签不垂直对齐

python - 在浏览器中将 PUT 上传到 S3 时忽略内容类型?

python - 是否有与 fortran 可重复格式描述符等效的 python 版本?

python - 是否可以在 Python 中更改单个像素的颜色?

python - 将 PIL 黑白图像转换为 Numpy 数组时出错

python - 类型错误 : crop() takes from 1 to 2 positional arguments but 5 were given