我正在编写一个程序,该程序使用BMP和一个单独的文件作为透明度层。我需要将它们转换成PNG,所以我使用PIL在python这样做。但是,我需要十六进制透明度文件中的数据,以便将其添加到图像中。我正在使用binascii。
现在,我遇到的问题是,由于某种原因,数据,通过十六进制函数(我已经系统地通过我的代码一块一块地缩小它),看起来不同于它在我的十六进制编辑器,并在图像中造成轻微的扭曲。我似乎不知道我哪里出错了。
十六进制编辑器中处理前的数据
十六进制编辑器处理后的数据
这是我的代码中有问题的部分:
filename = askopenfilename(parent=root)
with open(filename, 'rb') as f:
content = f.read()
f.close()
hexContent = binascii.hexlify(content).decode("utf-8")
我输入我的输出(这是写入文件的十六进制内容。因为我知道它在编写文件时不会出错,而且它也与我的实际程序无关,所以我没有将该部分添加到代码片段中)
在别人问我之前,我试过编解码器。Encode (content, 'hex')和binascii.b2a_hex(content).
至于我是如何知道这部分是搞砸了,我打印出binascii.hexlify(内容),并发现相同的部分,在十六进制编辑器,它看起来完全相同,我得到了什么在最后。
另一个可能出错的地方是在"open(filename, 'rb')"步骤中。我还没有想到一个方法来验证这一点。因此,任何帮助或建议将不胜感激。如果您需要我用于测试目的的其中一个文件,我很乐意在这里添加一个。
如果我正确理解你的问题,那么你想要的输出应该在十六进制编辑器处理之前匹配数据。我可以用下面的代码获得它:
with open('Input.alp', 'rb') as f:
i = 0
for i, chunk in enumerate(iter(lambda: f.read(16), b'')):
if 688 <= i * 16 <= 736:
print i * 16, chunk.encode('hex')
输出:
688 ffffffffffffffffffffffffffffffff
704 ffffffffffffffffffffffe000000000
720 000000000000000001dfffffffffffff
736 ffffffffffffffffffffffffffffffff