【发布时间】:2012-07-26 02:28:18
【问题描述】:
我在 python 服务器上创建了一个 PIL 图像字符串:
frame = cv.CaptureFromCAM(0)
image = Image.fromstring('RGB', cv.GetSize(frame), frame.tostring(), 'raw', 'BGR')
buffer = cStringIO.stringIO()
image.save(buffer,'JPEG')
udptransmit(buffer.getvalue())
我有一个 java 客户端试图读取传输的图像字符串并重新生成 jpeg。然而,这似乎不起作用。我创建了一个 python 客户端只是为了检查,我可以使用对 pygame 的 load 方法的调用正确地修改 jpeg。 从 python 发送的字符串包含字符 6:10 = JFIF,这是正确的格式(也被 python 的 imghdr 模块识别。 在java中,我试过了
只需将接收到的字符串的字节内容写入文件并使用 .jpeg 扩展名命名即可。该文件不是有效的 jpeg。
使用
ImageIO从字符串中读取字节。这会产生一个空图像。试图获取
ImageReaderByFormat('JPEG')并以此解析字节。这给了我一个错误说明'Image is not a JPEG, starts with 0x...'
我真的不明白为什么 python 将字符串识别为有效的 jpeg 而 java 没有。两者是否使用不同的 jpeg 解码器?即使他们这样做了,不应该同时验证或拒绝字符串吗?
【问题讨论】:
-
也许您遇到了字节顺序问题?
-
你是用
wb写文件吗? -
OpenCV 不能进行 JPEG 编码吗?看起来 PIL 是一个不必要的依赖。
-
好吧,我确实尝试将 cv.captureFromCam() 本身的帧作为字符串传输,但是,1. 它仍然不起作用,2. 大小要大得多。但是我不确定 opencv 和 jpeg 编码
-
对于文件写入,我使用了FileOutputStream,它不需要wb或任何其他模式(据我所知)
标签: java python image jpeg python-imaging-library