Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 将get_格式副本与CMYK JPEG一起使用时出现枕头错误_Django_Pillow_Wagtail - Fatal编程技术网

Django 将get_格式副本与CMYK JPEG一起使用时出现枕头错误

Django 将get_格式副本与CMYK JPEG一起使用时出现枕头错误,django,pillow,wagtail,Django,Pillow,Wagtail,我们的Wagtail站点中有一个自定义端点,可以在另一个站点/管理员中使用图像格式副本 它使用这条线 rendition = the_image.get_rendition(filter + "|format-jpeg|jpegquality-80") 局部使用Wagtail 1.13.1和pillow 5.0.0可以,错误只发生在pillow处于2.8.2的生产中。如果Wagtail管理枕头依赖,它应该强制执行最低版本吗 这是一个bug/问题还是Wagtail不应该以这种方式管理依赖关系?我

我们的Wagtail站点中有一个自定义端点,可以在另一个站点/管理员中使用图像格式副本

它使用这条线

rendition = the_image.get_rendition(filter + "|format-jpeg|jpegquality-80")
局部使用Wagtail 1.13.1和pillow 5.0.0可以,错误只发生在pillow处于2.8.2的生产中。如果Wagtail管理枕头依赖,它应该强制执行最低版本吗

这是一个bug/问题还是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)
谢谢

JOS指定枕头>=5.0.0确实是解决这一问题的有效方法

一般来说,Wagtail在使用依赖项(如Pillow)时会尝试指定尽可能广泛的版本,以防由于某种原因无法升级到最新版本。例如,库可能会放弃对当前使用的Python旧版本的支持。在这种情况下,Wagtail与2.6版本的枕头广泛兼容。我之所以说“广义”,是因为旧版本可能存在Wagtail无法控制的bug,正如您在这里看到的一样——不幸的是,Wagtail项目不可能捕捉到这些更改,因为它需要不断监视Pillow的更改日志,以发现任何可能影响Wagtail用户的错误修复


话虽如此,Pillow的2.x分支现在已经足够过时了,总的来说,最好鼓励用户升级,所以我现在已经升级了。

自从将Pillow升级到5.0.0之后,我们现在开始出现IOError:无法将模式RGBA写入JPEG,我认为当带有alpha通道的PNG转换为JPEG时会出现这种情况。将枕头固定到4.1.1似乎可以解决这个问题。我只是想在这里提一下。