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

时间:2018-02-28 15:58:53

标签: django pillow wagtail

我们的Wagtail网站中有一个自定义端点,可以将图像再现用于其他网站/管理员。

它使用此行

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

本地使用Wagtail 1.13.1和枕头5.0.0它很好,错误只发生在枕头为2.8.2的生产中。如果Wagtail管理枕头依赖性,它应该强制执行最低版本吗?

这是一个错误/问题,还是Wagtail不想以这种方式管理依赖关系?我可以在我的生产要求文件中添加一个> = 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)

由于

乔丝

1 个答案:

答案 0 :(得分:1)

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

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

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