0

我有一个程序可以生成图片并将它们保存到文件或在标准输出中打印出原始图像数据。我正在使用 Python 子进程模块来调用外部程序,捕获其标准输出数据并从数据中创建 Python 图像对象。不过,我不断收到“无法识别图像文件”错误。我是 Python 的这一部分的新手。如果你知道如何实现这一点,你能帮忙吗?这是我的代码:

p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
raw = p.stdout.read()
buff = StringIO.StringIO()
buff.write(raw)
buff.seek(0)
im = Image.open(buff)
im.show()
4

1 回答 1

3

代码对我来说看起来不错。尝试添加行...

assert len(raw) >= 4
assert raw.startswith('\x89PNG')

...直接在线路之后...

raw = p.stdout.read()

...只是为了确保您获得甚至模糊有效的数据。

更新

试试这个...

from subprocess import check_output
from cStringIO import StringIO
from PIL import Image

raw = check_output(cmd)
buff = StringIO(raw)
im = Image.open(buff)
im.show()

更新#2

问题是有一个错误qrcode.exe,当它写入标准输出时,它会尝试将 UNIX 行结尾转换为 DOS 行结尾。

看起来该错误可能已在更高版本中得到修复。试试:https ://code.google.com/p/qrencode-win32/downloads/detail?name=qrcodegui_setup-3.3.1b.exe&can=1&q=qrencode-win32

于 2013-04-12T16:19:18.053 回答