png文件bug的file.read()?

时间:2016-10-07 00:11:13

标签: python file png

我正在尝试用纯文本读取PNG图像,就像在记事本中一样。 (以便以后转换为base64)。

测试图片:http://i.imgur.com/yrL3Zz2.png

所以我尝试了这段代码:

f = 'test1.png'
with open(f) as file:
    for i in xrange(0, 5):
        print(i, f, file.read())
print
f = 'test2.png'
with open(f) as file:
    for i in xrange(0, 5):
        print(i, f, file.read())

但是它没有读取整个文件,比如“read”函数就是这样做的。 如果我尝试再次为某些PNG调用read,则会再读一部分内容,而其他部分则不会,无论多久调用一次。

我只有这个输出:

(0, 'test1.png', '\x89PNG\n')
(1, 'test1.png', '')
(2, 'test1.png', '')
(3, 'test1.png', '')
(4, 'test1.png', '')

(0, 'test2.png', '\x89PNG\n')
(1, 'test2.png', '\xd2y\xb4j|\x8f\x0b5MW\x98D\x97\xfc\x13\\7\x11\xcaPn\x18\x80,}\xc6g\x90\xc5n\x8cDi\x81\xf9\xbel\xd6Fl\x11\xae\xdf s\xf0')
(2, 'test2.png', '')
(3, 'test2.png', '')
(4, 'test2.png', '')

但我想这样: http://i.stack.imgur.com/qvuvj.png

这是一个错误?

在base64中获取此文件的任何其他(简单)方法?

1 个答案:

答案 0 :(得分:1)

PNG文件不是文本文件;你必须把它们看作二进制文件,而不是文本文件,如下所示:

with open(f, 'rb') as file:

如果要生成数据的base64编码,请使用base64模块:

import base64
f = 'test1.png'
with open(f) as file:
    for i in xrange(0, 5):
        print(i, f, base64.b64encode(file.read()))