我试图在程序中使用枕头将摄像机的字节字符串保存到文件中。这是一个示例,该示例包含一个来自我的相机的小原始字节字符串,该字符串应使用LSB和12位表示分辨率为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')
Run Code Online (Sandbox Code Playgroud)
但是我在第7行(带有Image.open)收到以下错误:
OSError: cannot identify image file <_io.BytesIO object at 0x00000000041FC9A8>
Run Code Online (Sandbox Code Playgroud)
Pillow的文档暗示这是要走的路。
我试图从中应用解决方案
但无法正常运作。为什么这不起作用?
我编写了一个 C 扩展来从专有库访问相机的错误消息。结构是
setup.py
dicamsdk\
|---__init__.py
|---control.py
|---pcoError.c
Run Code Online (Sandbox Code Playgroud)
和setup.py
from setuptools import setup, Extension, find_packages
from dicamsdk.control import __version__
pcoErrorModule = Extension("dicamsdk.pcoError",
sources=["dicamsdk/pcoError.c"],
include_dirs=['C:\Program Files (x86)'
'\Digital Camera Toolbox'
'\Sensicam SDK\include'],
define_macros=[("PCO_ERRT_H_CREATE_OBJECT", None)],
)
setup(
name="pydicamsdk",
platforms=["win-amd64", 'win32'],
license="GNU GPLv3",
ext_modules=[pcoErrorModule],
packages=find_packages(),
version=__version__
)
Run Code Online (Sandbox Code Playgroud)
并control.py打算导入已编译的 C 扩展
from . import pcoError
Run Code Online (Sandbox Code Playgroud)
当我尝试构建(或安装)软件包时,我总是收到错误ImportError: cannot import name 'pcoError'。
它似乎唯一有效的方法是注释掉导入control.py并使用setup.py build_ext --inplace. 只需使用编译后的内容,我就可以构建/安装我的库。
我是否有一个解决方案可以setup.py首先编译我的扩展以实现简单的安装?