【发布时间】:2015-02-04 00:44:53
【问题描述】:
所以我一直在测试在 Python3 中使用以下代码读取未压缩的 png 文件:
f = open(r'img1.png', 'rb')
pixel = f.read()
print(pixel)
但是,除了我期望在 IDAT 块中的十六进制对之外,结果还给出了一些奇怪的附加字符:
b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x02\x00\x00\x00\x02\x08\x02\x00\x00\x00\ xfd\xd4\x9as\x00\x00\x00\x19IDAT\x08\x1d\x01\x0e\x00\xf1\xff\x00\x00\x00\x00\x00\xff\xff\x01\x00\xff\xff\ x13\x90\x90\x1b\xe4 \x0510O\xffC \x00\x00\x00\x00IEND\xaeB`\x82' 【0.1s完成】
知道这是什么吗?我假设当数据未压缩时,IDAT 中的所有内容都是十六进制对的像素数据。我已经搜索了 StackOverflow/Online 以及查看了 PNG 的文档,但没有任何运气。
这是我用来测试的图像的链接(只有 4 个像素): img1.png
仅供参考,如果有帮助,我正在通过 ArchLinux 运行测试。
【问题讨论】:
-
图像可能格式不正确。您是否在其他图像文件中看到过类似的模式?
-
只是仔细检查 - 你知道
\x0510O是字节序列0x05 0x31 0x30 0x4f而不是一些奇怪的多字节序列? -
不要忘记,PNG 中的每条扫描线都以一个额外的字节开始,以标识用于该线的预过滤器。无论每个像素有多少字节,每条扫描线只需多出一个字节。
-
是的,@senshin 这正是我遗漏的信息。谢谢!
标签: python-3.x hex png