Python PIL 从 STDIN 读取 PNG

标签 python png python-imaging-library

我在使用 PIL 从 STDIN 读取 png 图像时遇到问题。当图像被 PIL 写入时,它是所有 scrambled , 但如果我使用简单的文件打开、写入和关闭文件来写入文件,则文件将被保存 perfectly .

我有一个程序可以按顺序将 png 文件转储到标准输出,不进行压缩,我使用 python 脚本读取该流,该脚本应该读取数据并对几乎每个 png 执行一些例程。转储数据的程序写入一定的字符串来分隔 PNG 文件,该字符串是 "{fim:FILE_NAME.png}"

脚本是这样的:

import sys
import re
from PIL import Image

png = None

for linha in sys.stdin: 
    if re.search('{fim:', linha):
        fname = linha.replace('{fim:','')[:-2]

        # writes data directly to file, works fine
        #f = open("/tmp/%s" % fname  , 'w')
        #f.write(png)
        #f.close()

        # create a PIL Image from data and writes to disk, fails fine
        im = Image.frombuffer("RGB",(640,480),png, "raw", "RGB", 0, 1)
        #im = Image.fromstring("RGB",(640,480),png)
        im.save("/tmp/%s" % fname)

        png = None

    else:
        if png is None:
            png = linha
        else:
            png+= linha

imagemagick 从错误的图像中识别:

/tmp/1349194042-24.png PNG 640x480 640x480+0+0 8-bit DirectClass 361KiB 0.010u 0:00.019

imagemagick 从工作图像中识别:

/tmp/1349194586-01.png PNG 640x480 640x480+0+0 8-bit DirectClass 903KiB 0.010u 0:00.010

有人知道发生了什么事吗?它是关于小/大字节序的吗?我尝试了 Image.frombufferImage.fromstring 不同的模式,但都没有。似乎有更多关于 PIL 期望的缓冲区的信息。

谢谢,

最佳答案

如果 png 变量包含来自 PNG 文件的二进制数据,则不能使用 frombuffer 读取它;用于读取原始像素数据。相反,使用 io.StringIOImage.open ,即:

import io
from PIL import Image

img = Image.open(io.StringIO(png))

关于Python PIL 从 STDIN 读取 PNG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12694230/

相关文章:

java jbutton 图像 png 可点击区域

javascript - 使用 Node JS 保存 AR-Drone 2.0 视频流

python - 使用 PIL 在 Python 中将带有回车符的文本写入图像

Python PIL导入Mac兼容性

python - 在多线程中调用 Py_Initialize()

python - 自定义 Flask 应用程序的记录器名称

python - 如何在每个excel文件中合并具有多个相同数量的工作表的多个excel文件

python - 枚举行为与 Python 之间的区别

cocos2d-iphone - 加载更多数量的PNG's in Cocos2d Game.Suggestion needed for “PNG to Pvr.ccz”转换时出现问题

Python:如何创建一个包含图像中每个像素信息的数组?