如何在python中读取PNG的字节?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (713)

我想读取PNG的字节,并修改它们。我已经试过这个代码了:

import codecs
ed = input("Would you like to encode or decode?\n(e/d)> ")
image = input("What image would you like to use?\n> ")
if(ed == 'e'):
    imagef = codecs.open(image, encoding = "hex")
    imagel = imagef.read()
    img = imagel.decode('hex')
    print(img)

但是我得到了错误:

Would you like to encode or decode?
(e/d)> e
What image would you like to use?
> i.png
Traceback (most recent call last):
  File "main.py", line 7, in <module>
    imagel = imagef.read()
  File "/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6/codecs.py", line 700, in read
    return self.reader.read(size)
  File "/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6/codecs.py", line 503, in read
    newchars, decodedbytes = self.decode(data, self.errors)
  File "/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6/encodings/hex_codec.py", line 25, in decode
    return hex_decode(input, errors)
  File "/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6/encodings/hex_codec.py", line 19, in hex_decode
    return (binascii.a2b_hex(input), len(input))

binascii.Error: Non-hexadecimal digit found

我如何修复它?

提问于
用户回答回答于

PNG文件没有“十六进制内容”-它们有字节-“十六进制”不是你想的那样,它只是表示数字的另一种方式。

你的代码是不可修复的,因为它首先没有任何意义 - 没有什么可解码的。

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动