首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在python中读取PNG的字节数

在python中读取PNG的字节数
EN

Stack Overflow用户
提问于 2018-07-05 03:39:20
回答 1查看 4K关注 0票数 -2

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

代码语言:javascript
复制
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)

但我得到以下错误:

代码语言:javascript
复制
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

我该怎么解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2018-07-05 03:44:55

后退一步-你的假设是不正确的

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

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

程序员使用十六进制是为了方便起见,因为每个十六进制数字可以表示4位,因此只需要两个十六进制数字来表示一个字节。然而,这只是一种表现。

编辑:

从注释中可以看出,您想要的是将二进制数据添加到文件的末尾:

代码语言:javascript
复制
message = 'Hello World!'

with open(image, 'ab') as f: # open the file for appending, binary mode
    f.write(bytes(8))  # write 8 null bytes to the file
    f.write(message.encode('utf-8'))  # add the message, encoded to bytes
                                      # by using the utf-8 encoding

然后再读一遍消息:

代码语言:javascript
复制
with open(image, 'rb') as f: # open the file in read binary mode
    data = f.read() # read the bytes from the file to a variable

pos = data.find(bytes(8)) # locate the 8 null bytes
message = data[pos + 8:].decode('utf-8')  # decode the message
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51179980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档