Skip to main content
 首页 » 编程设计

python之一旦我可以将这个字符串保存为图像,其他时候我就不能

2025年05月04日20kenshinobiy

好的。长话短说。

我的相机有一个拍摄照片的方法,这是它返回的:

[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 只获取一行。