2

我在 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中,我试过了

  1. 只需将接收到的字符串的字节内容写入文件并使用 .jpeg 扩展名命名即可。该文件不是有效的 jpeg。

  2. ImageIO用于从字符串中读取字节。这会产生一个空图像。

  3. 试图ImageReaderByFormat('JPEG')用这个来获取和解析字节。这给了我一个错误说明' Image is not a JPEG, starts with 0x...'

我真的不明白为什么 python 将字符串识别为有效的 jpeg 而 java 没有。两者是否使用不同的 jpeg 解码器?即使他们这样做了,也不应该验证或拒绝字符串吗?

4

1 回答 1

0

刚刚找到问题的解决方案问题出在java中使用的字符集,同时将从我的python服务器发送的字符串转换为java中的字节。这是我的 java 客户端代码中所需的简单修改:

Charset charset = Charset.forName("ISO-8859-1");
Byte[] bytes: Array[Byte] = cam_data.getBytes(charset)
File f = new File("image.jpeg")
FileImageOutputStream fios = new FileImageOutputStream(f)
BufferedImage  bim = ImageIO.read(new ByteArrayInputStream(bytes))
ImageIO.write(bim,"jpeg",fios)

引导我找到答案的有用链接是http://www.java-forums.org/advanced-java/50516-reading-image-files-into-strings.html

于 2012-07-26T14:26:20.677 回答