Python 尝试显示简单的空图像时出现 Wand 错误:'no encode delegate for this image format'
Python Wand error when trying to display simple empty image: 'no encode delegate for this image format'
我是 Wand 的新手,我尝试了以下非常简单的代码来显示红色图像:
from wand.color import Color
import wand.display
with Image(width=100, height=100, background=Color("red")) as img:
wand.display.display(img)
但是我收到了这个错误:
MissingDelegateError Traceback (most recent call last)
<ipython-input-24-6badc0244551> in <module>
1 with Image(width=100, height=100, background=Color("red")) as img:
----> 2 wand.display.display(img)
3
~/dev/.venv/lib/python3.7/site-packages/wand/display.py in display(image, server_name)
60 ext = '.' + image.format.lower()
61 path = tempfile.mktemp(suffix=ext)
---> 62 image.save(filename=path)
63 os.system(('start ' if system == 'Windows' else 'open ') + path)
64 else:
~/dev/.venv/lib/python3.7/site-packages/wand/image.py in save(self, file, filename, adjoin)
8916 r = library.MagickWriteImage(self.wand, filename)
8917 if not r:
-> 8918 self.raise_exception()
8919
8920
~/dev/.venv/lib/python3.7/site-packages/wand/resource.py in raise_exception(self, stacklevel)
228 warnings.warn(e, stacklevel=stacklevel + 1)
229 elif isinstance(e, Exception):
--> 230 raise e
231
232 def make_blob(self, format=None):
MissingDelegateError: no encode delegate for this image format `' @ error/constitute.c/WriteImage/1240
查看堆栈跟踪,我意识到 Wand 在显示之前临时将图像存储在文件中,因此我尝试在调用 display()
之前添加以下行:
img.format = 'png'
并且有效。我在这里错过了什么吗?这是显示简单图像的预期方式吗?
Am I missing something here? Is this the expected way of displaying a simple image?
您提出的解决方案是正确的。对于 Windows / macOS,wand 假定您不是 运行 X11 服务器。将图像写入磁盘并让 OS 在您的默认图像查看器中显示它要容易得多。
问题
创建canvas或伪图像格式(例如PLASMA:
)时,内部"image info"和编码器尚未定义。您的简单图像是 CMYK 还是 RGB?调色板、字节序等等等等。ImageMagick 抛出异常是正确的,直到用户至少指定一个编码器/委托来编写。
修复
幸运的是,对于大多数开源项目,一个月前就在 Wand 中报告并修补了这个问题(?)。如果未定义图像的编码器(格式),Wand 的 display()
方法会将 PNG 文件移交给 OS。
不幸的是,对于大多数开源项目,发布和分发补丁版本可能需要数周时间。最好关注Wand's release notes
我是 Wand 的新手,我尝试了以下非常简单的代码来显示红色图像:
from wand.color import Color
import wand.display
with Image(width=100, height=100, background=Color("red")) as img:
wand.display.display(img)
但是我收到了这个错误:
MissingDelegateError Traceback (most recent call last)
<ipython-input-24-6badc0244551> in <module>
1 with Image(width=100, height=100, background=Color("red")) as img:
----> 2 wand.display.display(img)
3
~/dev/.venv/lib/python3.7/site-packages/wand/display.py in display(image, server_name)
60 ext = '.' + image.format.lower()
61 path = tempfile.mktemp(suffix=ext)
---> 62 image.save(filename=path)
63 os.system(('start ' if system == 'Windows' else 'open ') + path)
64 else:
~/dev/.venv/lib/python3.7/site-packages/wand/image.py in save(self, file, filename, adjoin)
8916 r = library.MagickWriteImage(self.wand, filename)
8917 if not r:
-> 8918 self.raise_exception()
8919
8920
~/dev/.venv/lib/python3.7/site-packages/wand/resource.py in raise_exception(self, stacklevel)
228 warnings.warn(e, stacklevel=stacklevel + 1)
229 elif isinstance(e, Exception):
--> 230 raise e
231
232 def make_blob(self, format=None):
MissingDelegateError: no encode delegate for this image format `' @ error/constitute.c/WriteImage/1240
查看堆栈跟踪,我意识到 Wand 在显示之前临时将图像存储在文件中,因此我尝试在调用 display()
之前添加以下行:
img.format = 'png'
并且有效。我在这里错过了什么吗?这是显示简单图像的预期方式吗?
Am I missing something here? Is this the expected way of displaying a simple image?
您提出的解决方案是正确的。对于 Windows / macOS,wand 假定您不是 运行 X11 服务器。将图像写入磁盘并让 OS 在您的默认图像查看器中显示它要容易得多。
问题
创建canvas或伪图像格式(例如PLASMA:
)时,内部"image info"和编码器尚未定义。您的简单图像是 CMYK 还是 RGB?调色板、字节序等等等等。ImageMagick 抛出异常是正确的,直到用户至少指定一个编码器/委托来编写。
修复
幸运的是,对于大多数开源项目,一个月前就在 Wand 中报告并修补了这个问题(?)。如果未定义图像的编码器(格式),Wand 的 display()
方法会将 PNG 文件移交给 OS。
不幸的是,对于大多数开源项目,发布和分发补丁版本可能需要数周时间。最好关注Wand's release notes