我们的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)
由于
乔丝
答案 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。