无法识别图像文件 io.BytesIO on raspberry Pi 使用 PiCamera 库和 PIL



我在使用 PiCamera 捕获函数的输出(在 BytesIO 流中定向(并使用 PIL 库打开它时遇到问题。以下是代码(基于 PiCamera 基本示例(:

#Camera stuff
camera = PiCamera()
camera.resolution = (640, 480)
stream = io.BytesIO()
sleep(2)
try:
for frame in camera.capture_continuous(stream, format = "jpeg", use_video_port = True):
frame.seek(0)
image = Image.open(frame) //THIS IS WHERE IS CRASHES
#OTHER STUFF THAT IS NON IMPORTANT GOES HERE
frame.truncate(0)
finally:
camera.close()
stream.close()

错误是:PIL.UnidentifiedImageError: cannot identify image file <_io.BytesIO object at 0xaa01cf00>

任何帮助将不胜感激:)

有好的一天!

问题很简单,但我想知道为什么io库以这种方式工作。 只需在截断流后将其寻回 0 或寻求 0,然后只需调用不带参数的 truncate(全部在打开图像后完成(。这样:

for frame in camera.capture_continuous(stream, format = "jpeg", use_video_port = True):
stream.seek(0)
image = Image.open(stream)
#Do stuff with image
stream.seek(0)
stream.truncate()

基本上,当您打开图像并对其执行一些操作时,BytesIO 的指针可以四处移动并最终到达零位置以外的其他地方。之后,当您调用 truncate(0( 时,它不会像我认为的那样将指针移回零(对我来说,将指针移回截断发生的位置似乎是合乎逻辑的(。当代码再次运行时,捕获会写入流,但这次它不会在开始时开始写入,之后一切都会中断。

希望这可以帮助将来的某人:)

相关内容

  • 没有找到相关文章

最新更新