将 get_rendition 与 CMYK JPEG 一起使用时出现枕头错误

Pillow error when using get_rendition with CMYK JPEGs

我们的 Wagtail 站点中有一个自定义端点,可以使图像再现用于另一个 site/admin。

它使用这条线

rendition = the_image.get_rendition(filter + "|format-jpeg|jpegquality-80")

本地使用 Wagtail 1.13.1 和 pillow 5.0.0 没问题,错误只发生在 pillow 为 2.8.2 的生产环境中。如果 Wagtail 管理 pillow 依赖项,它是否应该强制执行最低版本?

这是 bug/issue 还是 Wagtail 不应该以这种方式管理依赖项?我可以在我的生产需求文件中添加一个 pillow>=5.0.0 来修复它,所以也许这样可以吗?

错误是:

IOError: encoder error -2 when writing image file

django/core/handlers/exception.py in inner at line 41

response = get_response(request)
django/core/handlers/base.py in _legacy_get_response at line 249

response = self._get_response(request)
django/core/handlers/base.py in _get_response at line 187

response = self.process_exception_by_middleware(e, request)
django/core/handlers/base.py in _get_response at line 185

response = wrapped_callback(request, *callback_args, 
**callback_kwargs)
foxsite/views/views.py in get_image_filename at line 32

rendition = the_image.get_rendition(filter + "|format-
jpeg|jpegquality-80")
wagtail/wagtailimages/models.py in get_rendition at line 271

generated_image = filter.run(self, BytesIO())
wagtail/wagtailimages/models.py in run at line 404

return willow.save_as_jpeg(output, quality=quality, progressive=True, 
optimize=True)
willow/plugins/pillow.py in save_as_jpeg at line 74

image.save(f, 'JPEG', quality=quality, **kwargs)
PIL/Image.py in save at line 1693

save_handler(self, fp, filename)
PIL/JpegImagePlugin.py in _save at line 697

ImageFile._save(im, fp, [("jpeg", (0, 0)+im.size, 0, rawmode)], 
bufsize)
PIL/ImageFile.py in _save at line 486

raise IOError("encoder error %d when writing image file" % s)

谢谢

乔斯

指定 pillow>=5.0.0 确实是解决此问题的有效方法。

通常,Wagtail 在使用诸如 Pillow 之类的依赖项时会尝试指定尽可能广泛的版本,以防人们出于某种原因无法升级到最新版本(例如,库可能会掉线)支持他们当前使用的 Python 的旧版本)。在这种情况下,Wagtail 广泛 兼容早至 2.6 的 Pillow 版本。 (我说 'broadly' 因为旧版本很可能有 Wagtail 无法控制的错误,就像你在这里看到的那样 - 不幸的是,Wagtail 项目实际上不可能捕捉到这些变化,因为它需要不断监控 Pillow 的变更日志以发现可能影响 Wagtail 用户的任何错误修复。)

话虽如此,Pillow 的 2.x 分支现在已经过时了,总的来说,鼓励用户升级更好,所以我现在 updated Wagtail to require 4.x or above