特定の形式を必要とする別のプログラムにプラグインするために、4x4、5.6.5.0.0、.bmp ファイルを RGB 値のリストに変換しようとしています。 「rb」モードで開いた場合でも、Python はデータの一部を使用する前に変換しています。
たとえば、使用する場合:
f = open("imgFile.bmp", "rb")
imgData=f.read()
f.close()
print imgData
私は得る:
BMh\x00\x00\x00\x00\x00\x00\x006\x00\x00\x00(\x00\x00\x00\x04\x00\x00\x00\xfc\xff\xff\xff\x01\x00\x18 \x00\x00\x00\x00\x002\x00\x00\x00\x12\x0b\x00\x00\x12\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcc \xbb\xaa\xff\xee\xdd\x00\x00\x00\xff\xff\xff\xdd\xcc\xbb\x00\x00\x00\xff\xff\xff\x00\x00\x00\x00\x00 \x00\xff\xff\xff\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00\x00\xff\xff\xff3"\x11\x00\x00
ほとんどの場合、これで問題ありません (bmp ヘッダーの後に必要な 16 進値を取得できます。これらの値は「\xcc\xbb\xaa . . .」で始まりますが、一部の 16 進値が他の文字として解釈されているようです。シンボルは、少なくとも翻訳を困難にしますが、最悪の場合、元のデータを確実に復元することを不可能にするあいまいさをもたらします。
たとえば、文字列の末尾近くに次のシーケンスがあります。
\xff3"\x11
次のように表示されます。
\xff\x33\x22\x11
(この表は、'33' が '3' として、'22' が '"' として解釈できることを示しており、そのように解釈されるべきであると確信しています。以下のテキスト エディターでデータがどのように表示されるかを参照してください)。
あいまいさがなければ、すべてのシンボルを 16 進形式に戻すのは簡単ですが、より複雑なファイルでは多くの可能性があります。たとえば、シーケンス「6666」がある場合、「ff」に変更されるだけで、データに既に含まれている可能性のある「ff」のインスタンスとは区別できません。
私の質問は、Python でさらに解析およびフォーマットするために、データを翻訳せずに明確に保つにはどうすればよいですか?
説明したことが起こっていることを確認するために、SublimeText でファイルを開きました。次のように表示されます。
424d 6800 0000 0000 0000 0000 3600 0000 2800 0000 0400 0000 FCFF FFFF 0100 1800 0000 0000 0000 0000 0000 0000 0000 0000 00000000000000000000 0000 CCBB AAFF FFFF FFFFAPPA 00FFFFAPPA 00FFFAM 2211 0000
、これは正しくて使用可能です (私の目的には効率的ではありませんが、毎回テキスト エディターで開かなければなりません)。そのため、Python を使用してプロセスを自動化したいと考えています。
ちなみに、この人もそうだったのではないかと思います。