一旦我可以将此字符串保存为图像,其他时间我可以'

Ric*_*nop 1 python image-processing

好.长话短说.

我的相机有一个拍照的方法,这就是它的回报:

[160, 120, 3, 10, 1287848024, 96181, 'super long image string']
Run Code Online (Sandbox Code Playgroud)

在我调用这样的方法后,我能够解码字符串并将其保存为图像:

for i in range(0, 10):
  image = camProxy.getImageRemote(nameId)
  imageWidth = image[0]
  imageHeight = image[1]
  imageByteArray = image[6]
  im = Image.fromstring("YCbCr",(imageWidth,imageHeight),imageByteArray)
  fileName = str(time.time())+".jpg"
  im.save(fileName, "JPEG")
Run Code Online (Sandbox Code Playgroud)

这很好用,我可以打开保存的图像.

但是,如果我只是将字符串保存到txt文件中,之后我想加载它并像这样保存为图像:

f = open("rawImage.txt", "r")
data = f.readline()
f.close()

# save as image
im = Image.frombuffer("YCbCr",(160,120),data)
im.save("test.jpg", "JPEG")
Run Code Online (Sandbox Code Playgroud)

我得到的几乎是完全绿色的图像.

这是一个示例字符串,我一直遇到问题:

http://richardknop.com/rawImage.txt

以下是该图像的摄像头的getImageRemote()方法的完整输出:

http://richardknop.com/log.txt

任何人都有想法可能出错?这是与编码有关的一些问题吗?所有文件都保存为ASCII,但我也尝试将它们全部保存为UTF-8.

编辑:

我是如何将图像写入文件的?我只是重定向脚本的输出:

python script.py > output.txt
Run Code Online (Sandbox Code Playgroud)

在脚本中我有:

print imageByteArray
Run Code Online (Sandbox Code Playgroud)

Ste*_*ski 6

我通过将文件模式更改为"r"来实现它"rb".

这是工作代码:

import time
import Image
image_data = [160, 120, 3, 10, 1287848024, 96181, 'really long string from http://richardknop.com/log.txt']
imageWidth = image_data[0]
imageHeight = image_data[1]
imageByteArray = image_data[6]
fout = open("image_data.txt", "wb")
fout.write(imageByteArray)
fout.close()
fin = open("image_data.txt", 'rb')
image_string = fin.read()
fin.close()
im = Image.fromstring("YCbCr",(imageWidth,imageHeight),image_string)
fileName = str(time.time())+".jpg"
im.save(fileName, "JPEG")
Run Code Online (Sandbox Code Playgroud)

我确认你是对的,在这里readreadline没有任何区别,但我仍然建议使用read,因为这说明你的意思.

这是我原来的答案:

更改data = f.readline()data = f.read(). read抓取整个文件,readline只抓一行.