我在一个系统上工作,它接收bytes个对象,其中包含一个格式的图像,这是事先不知道的,应该与它一起工作.我正在用PIL为我做这项工作.The documentation表示PIL.Image.open()可以识别文件,即使在传递文件对象时也是如此.我试过了,它与其他文件格式兼容.但SVG个文件似乎存在问题.

有没有办法让PIL本身工作,或者我必须通过一些其他方法识别图像,然后强制PIL.Image.open()将图像读取为SVG

MRE:

#!/usr/bin/env python3

import requests
import io
import PIL.Image

with requests.get("https://github.githubassets.com/favicons/favicon.svg") as r:
    data = r.content

with io.BytesIO(data) as image:
    PIL.Image.open(image)
Traceback (most recent call last):
  File "MRE.py", line 11, in <module>
    PIL.Image.open(image)
  File "/usr/lib/python3.11/site-packages/PIL/Image.py", line 3283, in open
    raise UnidentifiedImageError(msg)
PIL.UnidentifiedImageError: cannot identify image file <_io.BytesIO object at 0x7fe38b2457b0>

推荐答案

Pillow/PIL不支持SVG输入.

如果要使用PIL处理SVG输入,则需要首先渲染为栅格图形.这可以例如使用CairoSVG模块来完成.

不能很好地支持在Python中直接编辑SVG图形.但是,可以通过使用lxml模块编辑底层的XML struct 来实现.

Python相关问答推荐

如何将我的位置与光强度数据匹配到折射图案曲线中?

创建带有二维码的Flask应用程序,可重定向到特定端点

剧作家Python:expect(locator).to_be_visible()vs locator.wait_for()

jit JAX函数中的迭代器

如何根据日期和时间将状态更新为已过期或活动?

如何在solve()之后获得症状上的等式的值

pyscript中的压痕问题

寻找Regex模式返回与我当前函数类似的结果

matplotlib图中的复杂箭头形状

如何使用使用来自其他列的值的公式更新一个rabrame列?

为什么常规操作不以其就地对应操作为基础?

重置PD帧中的值

polars:有效的方法来应用函数过滤列的字符串

Polars map_使用多处理对UDF进行批处理

以异步方式填充Pandas 数据帧

用两个字符串构建回文

如何使用matplotlib查看并列直方图

解决Geopandas和Altair中的正图和投影问题

当HTTP 201响应包含 Big Data 的POST请求时,应该是什么?  

如何在Python中自动创建数字文件夹和正在进行的文件夹?