pythonでPNGファイルを開いてみる

思い立ったのでやってみようと思います。 きっとなんの役にも立たない。そして需要もない!でもお勉強にはなる!!はず。

OpenCVとかPillowとかは使わないぞ!

でもファイルオープンするだけ!

まずはPNGファイルフォーマットの中身確認。いきなりバイナリでドカッと書き出しても良いけど、そのための時間と体力とディスプレイの広さが足りません。のんびりいきます。

Google先生に聞きました。Headerの前にsignatureがあるそうです。8byteだそうです。 書き出してみましょう。

f = open('フルパス/lenna.png','rb') 
data = f.read(8)
print(data)
f.close()

openはフルパスでなくてもいけるのかな。引数のrbはread binaryのことでしょう。lennaさんは、皆さんのPCにもいらっしゃることかと思います。

で、実行結果は、

b'\x89PNG\r\n\x1a\n'

0:\x89 1:P 2:N 3:G 4:\r 5:\n 6:\x1a 7:\n

となって8byteかな。PNGの文字列は入ってます。signature感でてます。改行コードでトラップ仕掛けてるんですね。なかなか憎いことするね。

先頭のb’はバイナリで開いたからかな。と思って、確認のためmodeを指定せずopenしてみる。

f = open('フルパス/lenna.png') 
data = f.read(8)
print(data)
f.close()

なんやかやと言われるが結局以下のエラー。

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x89 in position 0: invalid start byte

'utf-8'においては、0x89がデコードできないんだけど。ということで、変換先に該当するコードがないですよ、と。改行コードにたどり着く前に捕まっちゃった。あ、b'はbyteのことみたいです。Google先生ありがとう。

PNGで先頭に0x89を置いてるのがこのためかな。テキストでは読むなよと。

ただ上記のエラーがでるのはpythonの仕様なのでしょうか。

せっかく開いたので、binaryのままもっと読み進める気でいますが、ちょっと今日は疲れたので、ここまで。