【发布时间】:2020-10-06 23:25:53
【问题描述】:
我在使用 PIL 从 STDIN 读取 png 图像时遇到问题。当图像由 PIL 写入时,都是scrambled,但如果我使用简单文件打开写入文件,写入和关闭文件保存perfectly。
我有一个程序可以将 png 文件按顺序转储到标准输出,没有压缩,我使用 python 脚本读取该流,该脚本应该读取数据并在几乎每个 png 上执行一些例程。转储数据的程序写入某个字符串来分隔PNGs文件,该字符串为"{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 位 DirectClass 361KiB 0.010u 0:00.019
imagemagick 从工作图像中识别:
/tmp/1349194586-01.png PNG 640x480 640x480+0+0 8 位 DirectClass 903KiB 0.010u 0:00.010
有人知道发生了什么吗?是关于小/大端的吗?我试过Image.frombuffer,Image.fromstring,不同的模式,但没有。似乎有更多关于 PIL 期望的缓冲区的信息。
谢谢,
【问题讨论】:
-
您是否在
stdin上接收pixels 或png 图像?您的解码器正在尝试将输入解码为 RGB 像素,并将忽略 PNG 标头(除其他外)。
标签: python png python-imaging-library