我在这里要做的是使用PIL将Tkinter Canvas的内容保存为.png图像。
这是我的保存功能('graph'是画布)。
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上运行它。
我如何使这项工作?
答案 0 :(得分:5)
哦,我得到同样的错误。我现在已经解决了
安装PIL和Ghostscript后执行以下操作
1)打开C:\ Python27 \ Lib \ site-packages \ PIL \ EpsImagePlugin.py 2)更改第50行附近的代码,使其如下所示:
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位于PATH
中 祝你好运答案 1 :(得分:2)
它看起来像Ghostscript executable is erroring out and then closing the connection。其他人在same problem上有different OSes。
因此,首先我建议您确认PIL已正确安装 - 请参阅FAQ page以获取提示。接下来,确保Ghostscript已安装并正常运行。最后,确保Python可以找到Ghostscript,例如通过运行在其他地方运行的PIL脚本。
哦,也 - 这里是some tips on catching the broken pipe error所以你的程序可以更有弹性,识别问题,并警告最终用户。希望有所帮助!
答案 2 :(得分:1)
我已经意识到虽然Python 2.7有这个EPEImagePulgin.py,但Anaconda也有它。不幸的是,Anaconda的文件是旧版本。不幸的是,当你从Spyder环境运行时,它正在从anaconda文件夹中获取epsimageplugin.py文件。
所以我得到了类似的管道错误。
当我进入python 2.7目录并打开python控制台然后运行我的代码时,它运行得很好。
因为lates epsimageplugin.py文件考虑了windows环境和相应的ghostscript exe文件。希望这可以帮助。