matplotlib 中 savefig JPG 的 IOError
IOError for savefig JPG in matplotlib
我正在尝试保存 JPG 文件,但遇到了问题。下面给出"IOError: encoder error -2 when writing image file"
import matplotlib.pyplot as plt
plt.plot([1, 2])
plt.savefig('image.jpg')
它适用于 png,所以我尝试:
pip install pillow
按照建议 here but it was already installed in Canopy. It seems that it could be related to this 错误。我尝试使用直接路径,但这也不起作用。
完整错误消息如下
Wrong JPEG library version: library is 62, caller expects 70
---------------------------------------------------------------------------
IOError Traceback (most recent call last)
/tmp/tmpMQF4j1.py in <module>()
1 import matplotlib.pyplot as plt
2 plt.plot([1, 2])
----> 3 plt.savefig('image.jpg')
/home/keith/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/pyplot.pyc in savefig(*args, **kwargs)
575 def savefig(*args, **kwargs):
576 fig = gcf()
--> 577 res = fig.savefig(*args, **kwargs)
578 draw() # need this if 'transparent=True' to reset colors
579 return res
/home/keith/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/figure.pyc in savefig(self, *args, **kwargs)
1468 self.set_frameon(frameon)
1469
-> 1470 self.canvas.print_figure(*args, **kwargs)
1471
1472 if frameon:
/home/keith/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/backends/backend_qt5agg.pyc in print_figure(self, *args, **kwargs)
159
160 def print_figure(self, *args, **kwargs):
--> 161 FigureCanvasAgg.print_figure(self, *args, **kwargs)
162 self.draw()
163
/home/keith/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/backend_bases.pyc in print_figure(self, filename, dpi, facecolor, edgecolor, orientation, format, **kwargs)
2192 orientation=orientation,
2193 bbox_inches_restore=_bbox_inches_restore,
-> 2194 **kwargs)
2195 finally:
2196 if bbox_inches and restore_bbox:
/home/keith/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/backends/backend_agg.pyc in print_jpg(self, filename_or_obj, *args, **kwargs)
577 options['quality'] = rcParams['savefig.jpeg_quality']
578
--> 579 return image.save(filename_or_obj, format='jpeg', **options)
580 print_jpeg = print_jpg
581
/home/keith/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/PIL/Image.pyc in save(self, fp, format, **params)
1691
1692 try:
-> 1693 save_handler(self, fp, filename)
1694 finally:
1695 # do what we can to clean up
/home/keith/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/PIL/JpegImagePlugin.pyc in _save(im, fp, filename)
695 bufsize = max(ImageFile.MAXBLOCK, bufsize, len(info.get("exif", b"")) + 5)
696
--> 697 ImageFile._save(im, fp, [("jpeg", (0, 0)+im.size, 0, rawmode)], bufsize)
698
699
/home/keith/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/PIL/ImageFile.pyc in _save(im, fp, tile, bufsize)
495 s = e.encode_to_file(fh, bufsize)
496 if s < 0:
--> 497 raise IOError("encoder error %d when writing image file" % s)
498 e.cleanup()
499 try:
IOError: encoder error -2 when writing image file
我的直接回答是尝试
pip install pillow --upgrade
这将升级您的 PIL 版本 - 因此可能需要获得编码器版本 70 而不是 62,因为错误的第一行表明这是必要的
但是
虽然我不熟悉 Canopy,但我浏览了他们的网站,他们似乎实现了他们的 own package manager (or at least wrap one). This article 似乎解释了如何使用它。
所以,我先去那里看看,找到 PIL
或 pillow
,然后单击选项进行升级。仅当上面的命令行版本不起作用/升级不可用/包管理器不适用于您的特定订阅时才使用。
包管理器有一个 Canopy 功能,它知道包已安装但不使用它。这意味着如果您尝试为 Canopy 终端安装或升级 pillow,它将无法执行任何操作。要访问枕头,您必须通过包管理器进行。
- 工具-> 包管理器
- 在搜索栏中输入枕头
- 点击枕头
- 点击安装
虽然在此 Canopy 无法访问之前安装了枕头。
我正在尝试保存 JPG 文件,但遇到了问题。下面给出"IOError: encoder error -2 when writing image file"
import matplotlib.pyplot as plt
plt.plot([1, 2])
plt.savefig('image.jpg')
它适用于 png,所以我尝试:
pip install pillow
按照建议 here but it was already installed in Canopy. It seems that it could be related to this 错误。我尝试使用直接路径,但这也不起作用。
完整错误消息如下
Wrong JPEG library version: library is 62, caller expects 70
---------------------------------------------------------------------------
IOError Traceback (most recent call last)
/tmp/tmpMQF4j1.py in <module>()
1 import matplotlib.pyplot as plt
2 plt.plot([1, 2])
----> 3 plt.savefig('image.jpg')
/home/keith/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/pyplot.pyc in savefig(*args, **kwargs)
575 def savefig(*args, **kwargs):
576 fig = gcf()
--> 577 res = fig.savefig(*args, **kwargs)
578 draw() # need this if 'transparent=True' to reset colors
579 return res
/home/keith/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/figure.pyc in savefig(self, *args, **kwargs)
1468 self.set_frameon(frameon)
1469
-> 1470 self.canvas.print_figure(*args, **kwargs)
1471
1472 if frameon:
/home/keith/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/backends/backend_qt5agg.pyc in print_figure(self, *args, **kwargs)
159
160 def print_figure(self, *args, **kwargs):
--> 161 FigureCanvasAgg.print_figure(self, *args, **kwargs)
162 self.draw()
163
/home/keith/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/backend_bases.pyc in print_figure(self, filename, dpi, facecolor, edgecolor, orientation, format, **kwargs)
2192 orientation=orientation,
2193 bbox_inches_restore=_bbox_inches_restore,
-> 2194 **kwargs)
2195 finally:
2196 if bbox_inches and restore_bbox:
/home/keith/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/backends/backend_agg.pyc in print_jpg(self, filename_or_obj, *args, **kwargs)
577 options['quality'] = rcParams['savefig.jpeg_quality']
578
--> 579 return image.save(filename_or_obj, format='jpeg', **options)
580 print_jpeg = print_jpg
581
/home/keith/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/PIL/Image.pyc in save(self, fp, format, **params)
1691
1692 try:
-> 1693 save_handler(self, fp, filename)
1694 finally:
1695 # do what we can to clean up
/home/keith/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/PIL/JpegImagePlugin.pyc in _save(im, fp, filename)
695 bufsize = max(ImageFile.MAXBLOCK, bufsize, len(info.get("exif", b"")) + 5)
696
--> 697 ImageFile._save(im, fp, [("jpeg", (0, 0)+im.size, 0, rawmode)], bufsize)
698
699
/home/keith/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/PIL/ImageFile.pyc in _save(im, fp, tile, bufsize)
495 s = e.encode_to_file(fh, bufsize)
496 if s < 0:
--> 497 raise IOError("encoder error %d when writing image file" % s)
498 e.cleanup()
499 try:
IOError: encoder error -2 when writing image file
我的直接回答是尝试
pip install pillow --upgrade
这将升级您的 PIL 版本 - 因此可能需要获得编码器版本 70 而不是 62,因为错误的第一行表明这是必要的
但是
虽然我不熟悉 Canopy,但我浏览了他们的网站,他们似乎实现了他们的 own package manager (or at least wrap one). This article 似乎解释了如何使用它。
所以,我先去那里看看,找到 PIL
或 pillow
,然后单击选项进行升级。仅当上面的命令行版本不起作用/升级不可用/包管理器不适用于您的特定订阅时才使用。
包管理器有一个 Canopy 功能,它知道包已安装但不使用它。这意味着如果您尝试为 Canopy 终端安装或升级 pillow,它将无法执行任何操作。要访问枕头,您必须通过包管理器进行。
- 工具-> 包管理器
- 在搜索栏中输入枕头
- 点击枕头
- 点击安装
虽然在此 Canopy 无法访问之前安装了枕头。