使用 Pillow 打开 webp 文件
Open webp file with Pillow
在 Anaconda 设置上,我想运行遵循简单的代码:
from PIL import Image
img = Image.open('test.webp')
这适用于我的 Linux 机器,但适用于 Windows:
UserWarning: image file could not be identified because WEBP support not installed
warnings.warn(message)
---------------------------------------------------------------------------
UnidentifiedImageError Traceback (most recent call last)
<ipython-input-3-79ee787a81b3> in <module>
----> 1 img = Image.open('test.webp')
~\miniconda3\lib\site-packages\PIL\Image.py in open(fp, mode, formats)
3028 for message in accept_warnings:
3029 warnings.warn(message)
-> 3030 raise UnidentifiedImageError(
3031 "cannot identify image file %r" % (filename if filename else fp)
3032 )
UnidentifiedImageError: cannot identify image file 'test.webp'
我确实安装了 libwebp
软件包,libwebp.dll
存在于我的 Anaconda 设置的 Library\bin
目录中。
有什么想法吗?
看来目前还没有解决方案。假设 libwepb
库中的 dwebp
在系统中可用,这对我有用,可以从 WEBP 文件生成 Pillow Image
对象:
import os
import subprocess
from PIL import Image, UnidentifiedImageError
from io import BytesIO
class dwebpException(Exception):
pass
def dwebp(file: str):
webp = subprocess.run(
f"dwebp {file} -quiet -o -", shell=True, capture_output=True
)
if webp.returncode != 0:
raise dwebpException(webp.stderr.decode())
else:
return Image.open(BytesIO(webp.stdout))
filename = 'test.webp'
try:
img = Image.open(filename)
except UnidentifiedImageError:
if os.path.splitext(filename)[1].lower() == ".webp":
img = dwebp(filename)
else:
raise
问题是 Anaconda 是否真的构建了支持 webp 的 Pillow。在 anaconda 网站上看我无法确定这一点。
但是,conda-forge
确实构建了支持 webp 的 Pillow,请参阅 here。所以你可能要考虑使用它。
在 Anaconda 设置上,我想运行遵循简单的代码:
from PIL import Image
img = Image.open('test.webp')
这适用于我的 Linux 机器,但适用于 Windows:
UserWarning: image file could not be identified because WEBP support not installed
warnings.warn(message)
---------------------------------------------------------------------------
UnidentifiedImageError Traceback (most recent call last)
<ipython-input-3-79ee787a81b3> in <module>
----> 1 img = Image.open('test.webp')
~\miniconda3\lib\site-packages\PIL\Image.py in open(fp, mode, formats)
3028 for message in accept_warnings:
3029 warnings.warn(message)
-> 3030 raise UnidentifiedImageError(
3031 "cannot identify image file %r" % (filename if filename else fp)
3032 )
UnidentifiedImageError: cannot identify image file 'test.webp'
我确实安装了 libwebp
软件包,libwebp.dll
存在于我的 Anaconda 设置的 Library\bin
目录中。
有什么想法吗?
看来目前还没有解决方案。假设 libwepb
库中的 dwebp
在系统中可用,这对我有用,可以从 WEBP 文件生成 Pillow Image
对象:
import os
import subprocess
from PIL import Image, UnidentifiedImageError
from io import BytesIO
class dwebpException(Exception):
pass
def dwebp(file: str):
webp = subprocess.run(
f"dwebp {file} -quiet -o -", shell=True, capture_output=True
)
if webp.returncode != 0:
raise dwebpException(webp.stderr.decode())
else:
return Image.open(BytesIO(webp.stdout))
filename = 'test.webp'
try:
img = Image.open(filename)
except UnidentifiedImageError:
if os.path.splitext(filename)[1].lower() == ".webp":
img = dwebp(filename)
else:
raise
问题是 Anaconda 是否真的构建了支持 webp 的 Pillow。在 anaconda 网站上看我无法确定这一点。
但是,conda-forge
确实构建了支持 webp 的 Pillow,请参阅 here。所以你可能要考虑使用它。