我有一个生成图片的程序,可以将它们保存到文件中,也可以在标准输出中打印出原始图像数据。我正在使用Python子进程模块来调用外部程序,捕获其stdout数据并从数据中创建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()
答案 0 :(得分: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
中存在一个错误,当它写入stdout时,它会尝试将UNIX行结尾转换为DOS行结尾。
看起来这个bug可能已在以后的版本中得到修复。尝试:https://code.google.com/p/qrencode-win32/downloads/detail?name=qrcodegui_setup-3.3.1b.exe&can=1&q=qrencode-win32