Python: PIL - [Errno 32] Сломанный канал при сохранении .png - PullRequest
4 голосов
/ 08 июня 2011

Здесь я пытаюсь сохранить содержимое холста Tkinter в виде изображения .png, используя PIL.

Это моя функция сохранения («graph» - это canvas).

def SaveAs():
    filename = tkFileDialog.asksaveasfilename(initialfile="Untitled Graph", parent=master)
    graph.postscript(file=filename+".eps")
    img = Image.open(filename+".eps")
    img.save(filename+".png", "png")

Но появляется эта ошибка:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python27\lib\lib-tk\Tkinter.py", line 1410, in __call__
    return self.func(*args)
  File "C:\Users\Adam\Desktop\Graphing Calculator\Graphing Calculator.py", line 352, in SaveAs
    img.save(filename+".png", "png")
  File "C:\Python27\lib\site-packages\PIL\Image.py", line 1406, in save
    self.load()
  File "C:\Python27\lib\site-packages\PIL\EpsImagePlugin.py", line 283, in load
    self.im = Ghostscript(self.tile, self.size, self.fp)
  File "C:\Python27\lib\site-packages\PIL\EpsImagePlugin.py", line 72, in Ghostscript
    gs.write(s)
IOError: [Errno 32] Broken pipe

Я запускаю это на Windows 7, Python 2.7.1.

Как мне заставить это работать?

Ответы [ 3 ]

5 голосов
/ 27 октября 2012

о, я просто получаю ту же ошибку. Я должен решить это сейчас

просто сделайте следующее после установки PIL и Ghostscript

1) Откройте C: \ Python27 \ Lib \ site-packages \ PIL \ EpsImagePlugin.py 2) Измените код возле строки 50, чтобы он выглядел так:

Команда построения ghostscript

command = ["gswin32c",
           "-q",                    # quite mode
           "-g%dx%d" % size,        # set output geometry (pixels)
           "-dNOPAUSE -dSAFER",     # don't pause between pages, safe mode
           "-sDEVICE=ppmraw",       # ppm driver
           "-sOutputFile=%s" % file,# output file
           "-"
           ]

Убедитесь, что gswin32c.exe находится в ПУТИ

удачи

2 голосов
/ 08 июня 2011

Похоже, что исполняемый файл Ghostscript выдает ошибку, а затем закрывает соединение . У других была эта такая же проблема на разных ОС .

Итак, сначала я бы порекомендовал вам подтвердить, что PIL установлен правильно - см. *1000* страницу часто задаваемых вопросов для подсказок. Затем убедитесь, что Ghostscript установлен и работает. Наконец, убедитесь, что Python может найти Ghostscript, например, запустив скрипт PIL, который работает в другом месте.

О, также - вот несколько советов по обнаружению ошибки сломанной трубы , чтобы ваша программа могла быть более устойчивой, распознала проблему и предупредила конечного пользователя. Надеюсь, это поможет!

1 голос
/ 13 декабря 2014

Я понял, что, хотя в Python 2.7 есть этот EPEImagePulgin.py, в Anaconda также есть. И, к сожалению, файл Анаконды является более старой версией. И, к сожалению, опять же, когда вы запускаете ваш из среды Spyder, он выбирает файл epsimageplugin.py из папки anaconda.

Итак, я получаю похожую ошибку сломанной трубы.

Когда я вошел в каталог python 2.7 и открыл консоль python, а затем запустил свой код, он работал нормально.

Потому что файл lates epsimageplugin.py учитывает среду windows и соответствующие exe-файлы ghostscript. Надеюсь это поможет.

...