【Python】BMP画像ファイルのヘッダ情報解析

スポンサーリンク
ビッグバナー(上2)

この記事では、PythonでBMP画像ファイルのヘッダ情報を取得する方法をソースコード付きで解説します。

BMP画像ファイルのヘッダ情報

BMP画像ファイルには、「ヘッダ部」と「データ部」があります。
ヘッダ部には画像の詳細情報(幅・高さ・色数など)、データ部には各画素の画素値が格納されています。
【詳細】BMP画像のファイル構造(ヘッダ部・データ部)

今回は、Pythonと標準関数のみを用いて、BMPファイルのヘッダ情報を解析してみました。

ソースコード(Python3)

サンプルプログラムのソースコードです。

#-*- coding:utf-8 -*-

def main():
    # bmpファイルをバイナリモードで読み込み
    file = open("color.bmp","rb")
    data = file.read()
    file.close()
    
    # ヘッダ部の情報を切り分け
    format_type = data[0:2] # 画像フォーマットの種類を取得
    file_size = data[2:6] # ファイルサイズを取得
    header_size = data[10:14] # ヘッダサイズを取得
    width, height = data[18:22], data[22:26] # 画像の高さと幅を取得
    color_bit = data[28:30] # 1画素の色数を取得  
    
    # リトルエンディアン方式で16進数から10進数に変換
    file_size = int.from_bytes(file_size, 'little')
    header_size = int.from_bytes(header_size, 'little')
    width = int.from_bytes(width, 'little')
    height = int.from_bytes(height, 'little')  
    color_bit = int.from_bytes(color_bit, 'little') 
    
    # ヘッダ情報をコンソール出力
    print("Format type:", format_type)
    print("File size:", file_size, "[byte]")
    print("Header size:", header_size, "[byte]") 
    print("Width:", width, "[px]")     
    print("Height:", height, "[px]")
    print("Total pixels:", width*height)  
    print("Color:", color_bit, "[bit]")  
    
if __name__ == "__main__":
    main()
ポイント 説明
format_type = data[0:2] data[0:2]で0~1番目(2byte)に格納されているファイルフォーマットの種類を読み出しています。
file_size = data[2:6] data[2:6]で2~5番目(4byte)に格納されていファイルサイズを読み出しています。
int.from_bytes(data ,’little’) バイナリデータをリトルエンディアンで10進数の整数値に変換します。

実行結果

サンプルプログラムの実行結果です。

■読み込んだBMPファイル(color.bmp)

プロ生ちゃん(暮井 慧)

■出力した情報

Format type: b'BM'
File size: 63786 [byte]
Header size: 54 [byte]
Width: 150 [px]
Height: 141 [px]
Total pixels: 21150
Color: 24 [bit]

バイナリエディタで確認した結果と一致していることがわかります。
【バイナリエディタ】BMP画像のファイル構造を解析

【関連記事】
【画像処理入門】アルゴリズム&プログラミング

スポンサーリンク
レクタングル(下2)
レクタングル(下2)

シェア&フォローお願いします!