Python ValueError:从bash管道读取png文件时嵌入的空字节

Ten*_*ngu 11 python linux bash

from PIL import Image
from subprocess import Popen, PIPE

scr = Image.open(Popen.communicate(Popen(['import','-w','0x02a00001','png:-'], stdout=PIPE))[0])
Run Code Online (Sandbox Code Playgroud)

错误:

  File "/usr/lib/python3/dist-packages/PIL/Image.py", line 2258, in open
    fp = builtins.open(filename, "rb")
ValueError: embedded null byte
Run Code Online (Sandbox Code Playgroud)

Tig*_*222 26

首先尝试将原始数据加载到BytesIO容器中:

from io import BytesIO
from PIL import Image
from subprocess import Popen, PIPE

data = Popen.communicate(Popen(['import','-w','0x02a00001','png:-'], stdout=PIPE))[0]
scr = Image.open(BytesIO(data))
Run Code Online (Sandbox Code Playgroud)

  • [Image.open](http://pillow.readthedocs.io/en/3.2.x/reference/Image.html#PIL.Image.open)采用文件名(字符串),pathlib.Path对象或文件对象.通过我的测试,它可以工作,我得到类似的东西:`<PIL.PngImagePlugin.PngImageFile image mode = P size = 291x374 at 0x7FABD43D1F98>`. (4认同)
  • `Image.open()` 接受一个文件名。如果您尝试在 Python 3 上打开包含空值的文件名,您会收到错误:“ValueError:嵌入空字节”。(要看到这个,请尝试“open('x\0y')”。)在我看来,将数据包装在“BytesIO”中并不能解决这个问题。 (3认同)
  • 我站着纠正。是的,包装数据以使其像文件对象一样工作应该可以完成这项工作。 (3认同)