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, 假定您不是 运行 X11 服务器。将图像写入磁盘并让 OS 在您的默认图像查看器中显示它要容易得多。

问题

创建canvas或伪图像格式(例如PLASMA:)时,内部"image info"和编码器尚未定义。您的简单图像是 CMYK 还是 RGB?调色板、字节序等等等等。ImageMagick 抛出异常是正确的,直到用户至少指定一个编码器/委托来编写。

修复

幸运的是,对于大多数开源项目,一个月前就在 Wand 中报告并修补了这个问题(?)。如果未定义图像的编码器(格式),Wand 的 display() 方法会将 PNG 文件移交给 OS。

不幸的是,对于大多数开源项目,发布和分发补丁版本可能需要数周时间。最好关注Wand's release notes