Python: PIL - 保存.png时出现[Errno 32] Broken pipe

4 投票
3 回答
2442 浏览
提问于 2025-04-16 19:11

我想做的是把Tkinter画布里的内容保存成一个.png格式的图片,使用的是PIL库。

这是我的保存函数('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。

我该怎么才能让它正常工作呢?

3 个回答

1

我发现,虽然 Python 2.7 有一个叫 EPEImagePulgin.py 的文件,Anaconda 里也有这个文件。不过不幸的是,Anaconda 里的这个文件是个旧版本。而且更糟糕的是,当你在 Spyder 环境中运行代码时,它会从 Anaconda 文件夹里找到这个旧的 epsimageplugin.py 文件。

所以我遇到了类似“管道破裂”的错误。

但是当我进入 Python 2.7 的目录,打开 Python 控制台,然后运行我的代码时,一切都正常。

因为最新的 epsimageplugin.py 文件考虑到了 Windows 环境和合适的 ghostscript 可执行文件。希望这对你有帮助。

2

看起来Ghostscript这个程序出错了,然后就断开了连接。其他人在不同的操作系统上也遇到过同样的问题。

所以,首先我建议你确认一下PIL(Python Imaging Library)是否安装正确,可以查看一下常见问题解答页面获取一些提示。接下来,确保Ghostscript已经安装并且能够正常工作。最后,确保Python能找到Ghostscript,比如可以运行一个在其他地方能正常工作的PIL脚本来测试一下。

哦,还有——这里有一些关于如何处理“断管”错误的建议,这样你的程序就能更稳健,能够识别问题并提醒用户。希望这些对你有帮助!

5

哦,我也遇到了同样的错误。不过我现在解决了。

在安装了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 在你的系统路径中。

祝你好运!

撰写回答