Python:将包含二进制数据的.txt转换为png

时间:2013-04-28 00:40:16

标签: python binary png

我有一个文本文件,其中包含png的二进制数据(至少,我很确定它确实如此,所以我将不再考虑这个假设)。

无论如何:我需要将它变回png

我尝试使用binascii库来执行此操作,即unhexlify,但我在尝试打开图片时遇到"this file is corrupted"错误。

所以我在问:如何将str放入文件中,以便我能够将其视为图像?感谢

1 个答案:

答案 0 :(得分:0)

如果我理解正确,你的文件由ascii中的1和0组成,因此open("myfile.txt", "r").read()会返回"100110000..."

在这种情况下,以下内容应该有所帮助:

with open("myfile.txt", "r") as f:
    txt = f.read()
b = "".join(chr(int(txt[i*8:(i+1)*8],2)) for i in range(len(txt) / 8))
with open("myfile.png", "wb") as f:
    f.write(b)

unhexlify在尝试从十六进制转换时给你带来麻烦,而文件是二进制文件。您需要将前8个字符(10011000)转换为"\x98",但unhexlify会将其视为4对十六进制数字1001,{ {1}},10,因此会转换为00

话虽如此,当我在你的文件样本上运行它时,我得不到看起来像PNG图像的结果。根据PNG规范http://www.libpng.org/pub/png/spec/1.2/PNG-Structure.html,PNG文件的第一个字节始终为137,而文件的第一个字节为10011000 = 0x98 = 152。