我试图在程序中使用枕头将摄像机的字节字符串保存到文件中。这是一个示例,该示例包含一个来自我的相机的小的原始字节字符串,该字符串应使用LSB和12bit表示分辨率为10x5像素的灰度图像:

import io
from PIL import Image

rawBytes = b'_\x00`\x00[\x00^\x00`\x00`\x00\\\x00\\\x00Z\x00\\\x00_\x00[\x00\\\x00\\\x00`\x00]\x00\\\x00^\x00_\x00\\\x00\\\x00]\x00]\x00_\x00]\x00]\x00Z\x00\\\x00^\x00\\\x00Z\x00^\x00_\x00]\x00^\x00Z\x00\\\x00Z\x00\\\x00]\x00_\x00]\x00^\x00Z\x00[\x00[\x00X\x00]\x00]\x00Z\x00'
rawIO = io.BytesIO(rawBytes)
rawIO.seek(0)
byteImg = Image.open(rawIO)
byteImg.save('test.png', 'PNG')

但是我在第7行中收到以下错误(带有Image.open):
OSError: cannot identify image file <_io.BytesIO object at 0x00000000041FC9A8>

Pillow的文档暗示这是要走的路。

我试图从中应用解决方案
  • PIL open() method not working with BytesIO
  • PIL cannot identify image file for io.BytesIO object

  • 但无法正常运作。为什么这不起作用?

    最佳答案

    我不确定生成的图像应该是什么样(您有示例吗?),但是如果您要将每个像素有12位的打包图像解压缩为16位图像,则可以使用以下代码:

    import io
    from PIL import Image
    
    rawbytes = b'_\x00`\x00[\x00^\x00`\x00`\x00\\\x00\\\x00Z\x00\\\x00_\x00[\x00\\\x00\\\x00`\x00]\x00\\\x00^\x00_\x00\\\x00\\\x00]\x00]\x00_\x00]\x00]\x00Z\x00\\\x00^\x00\\\x00Z\x00^\x00_\x00]\x00^\x00Z\x00\\\x00Z\x00\\\x00]\x00_\x00]\x00^\x00Z\x00[\x00[\x00X\x00]\x00]\x00Z\x00'
    im = Image.frombuffer("I;16", (5, 10), rawbytes, "raw", "I;12")
    im.show()
    

    关于python - BytesIO对象到镜像,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32208612/

    10-12 20:21