2016-10-07 5 views
-1

私は、メモ帳のように純粋なテキストでPNGイメージを読み込もうとしています。 (後でbase64に変換するため)。pngファイルのfile.read()にバグがありますか?

テスト画像: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()) 

をしかし、それは、そのような機能を行うために仮定される「読み取り」としてファイル全体を読んでいません。 一部のPNGについてもう一度readを呼び出そうとすると、もう1つの部分が読み込まれます。

私はこれだけの出力があります。

(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で入手するには、他の(単純な)方法がありますか?

+0

あなたは '開いたことがあります(f、 'rb') '? – TigerhawkT3

+0

Thx、@ TigerhawkT3。この旗の作品です! – Jeff

答えて

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())) 
関連する問題