好的。长话短说。
我的相机有一个拍摄照片的方法,这是它返回的:
[160, 120, 3, 10, 1287848024, 96181, 'super long image string']
我能够在调用如下方法后立即解码字符串并将其保存为图像:
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")
效果很好,我可以打开保存的图像。
但是,如果我只是将字符串保存到 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")
我得到的几乎是完全绿色的图像。
这是一个我一直遇到问题的示例字符串:
http://richardknop.com/rawImage.txt
这是该图像的相机的 getImageRemote() 方法的完整输出:
http://richardknop.com/log.txt
有人知道哪里出了问题吗?这是与编码有关的一些问题吗?所有文件都保存为 ASCII,但我也尝试将它们全部保存为 UTF-8。
编辑:
我如何将图像写入文件?我只是重定向了脚本的输出:
python script.py > output.txt
在我的脚本中:
print imageByteArray
请您参考如下方法:
我通过将文件模式从 "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")
我证实你是正确的,因为 read 和 readline 在这里没有区别,但我仍然建议使用 read,因为说出你的意思。
这是我的原始答案:
将 data = f.readline() 更改为 data = f.read()。 read 获取整个文件,readline 只获取一行。
