一旦我可以将这个字符串保存为图像,另一次我可以

2024-09-30 05:22:33 发布

您现在位置:Python中文网/ 问答频道 /正文

好吧。长话短说。在

我的相机有一个拍照方法,它返回的结果是:

[160, 120, 3, 10, 1287848024, 96181, 'super long image string']

我可以在调用如下方法后立即解码字符串并将其保存为图像:

^{pr2}$

这工作很好,我可以打开保存的图像。在

但是,如果我只是将字符串保存到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

Tags: 文件方法字符串图像imagetxtcomhttp
2条回答

也许你应该用这样的二进制模式来读写你的文件:

open('file_name', 'wb')
open('file_name', 'rb')

读入数据:

import Image
import ast

with open('rawImage.txt','r') as f:
   raw_data=f.read()
with open('log.txt','r') as f:
   log_data=f.read()   
log_data=ast.literal_eval(log_data)
imageWidth=log_data[0]
imageHeight=log_data[1]
log_data=log_data[6]        

让我们看看raw_data(来自原始图像.txt)与的字符串相同 log_data(来自日志.txt). 哦,它们的长度不一样:

^{pr2}$

看看这两条线的开头。似乎raw_data已经为'\x81'写入了4个字符,而这个字符是\x81的。在

print(list(raw_data[:10]))
# ['6', '}', '\\', 'x', '8', '1', '8', '}', '\\', 'x']
print(list(log_data[:10]))
# ['6', '}', '\x81', '8', '}', '\x81', '7', '\x90', '\x8a', '4']

这可能是因为原始图像.txt以写入模式'w'而不是'wb'打开。最好的解决办法就是写作原始图像.txt使用正确的写入模式,如Steven Rumbalski does here。在

但鉴于这种困境,有一种方法可以解决它:

raw_data_fixed=raw_data.decode('string_escape') 

现在这是可行的:

im = Image.fromstring("YCbCr",(imageWidth,imageHeight),raw_data_fixed)
im.show()

相关问题 更多 >

    热门问题