2015-06-12 1 views
1

Я пытаюсь сохранить JPG и проблемы. Ниже дается «IOError: ошибка датчика -2 при записи файла изображения»IOError для savefig JPG в matplotlib

import matplotlib.pyplot as plt 
plt.plot([1, 2]) 
plt.savefig('image.jpg') 

Он работает с PNG, так что я пытался:

pip install pillow 

как это было предложено here, но это уже было установлено в пологе. Похоже, что это может быть связано с ошибкой 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 
+0

Хорошо работает для меня в Windows 7, WinPython 3.3.5 и matplotlib 1.4.3. – Zenadix

+0

Я подозреваю, что это проблема навеса. – Keith

+0

Это почти наверняка связано с вашей версией PIL. Google полное сообщение об ошибке, и вы увидите много об этом. Было бы неплохо вставить больше (все) трассировки - в основном, чтобы подтвердить, что ошибка выбрана из «/site-packages/PIL/ImageFile.py». Кроме того, было бы полезно разместить ваши версии: OS, python и matplotlib (и PIL, если вы можете найти номер версии), чтобы помочь воспроизвести ошибку. Моя догадка заключается в том, что вам нужно будет найти способ получить более новую версию PIL. –

ответ

0

Существует функция Canopy диспетчера пакетов, где он знает, что пакет установлен, но не использует его. Это означает, что если вы попытаетесь установить или обновить подушку для терминала Canopy, он ничего не сможет сделать. Чтобы получить доступ к подушке, вы должны сделать это через менеджера пакетов.

  1. Сервис-> Менеджер пакетов
  2. Тип подушки в строке поиска
  3. нажмите на подушку
  4. нажмите установить

Хотя была установлена ​​подушка до этого Навес не имели доступа.

2

Мой непосредственный ответ будет попробовать

pip install pillow --upgrade 

Это обновить версию PIL - вероятно, поэтому получение кодировщика версии 70, а не 62, как первая строку необходимо указать ошибку

НО

alth Я не знаком с Canopy, у меня есть обзор вокруг их сайта, и кажется, что они реализуют свои own package manager (или, по крайней мере, обертывают один). This article, похоже, объясняет, как его использовать.

Итак, я бы сначала взглянул туда и нашел PIL или pillow и щелкните по опции для обновления. Используйте версию командной строки выше, только если это не работает/обновление недоступно/диспетчер пакетов недоступен с вашей конкретной подпиской.

+0

Да, я сказал, что уже пробовал. Команда возвращает «Требование уже обновлено: подушка в ./Enthought/Canopy_64bit/User/lib/python2.7/site-packages» – Keith

+0

Хорошо, вы не сказали, что использовали опцию --upgrade с пип, поэтому я не знал. Вы попробовали это, или собственный менеджер пакетов навесов, или и то, и другое? –

+0

Я действительно разобрал его, но ваши указатели действительно помогли. – Keith

 Смежные вопросы

  • Нет связанных вопросов^_^