【Python】Pillowで画像の解像度・形式・カラーモードを取得する方法

画像処理を行う前に、対象となる画像がどのような特性(JPEGなのかPNGなのか、カラーなのか白黒なのか、サイズはいくつか)を持っているかを確認することは非常に重要です。

Pillowの Image オブジェクトには、これらの情報を格納した属性が用意されており、読み込んだ直後に簡単にアクセスできます。

目次

画像情報の主要属性一覧

Image オブジェクトが持つ、画像のメタデータに関する主要な属性は以下の通りです。

属性名戻り値の型意味・内容
formatstr画像のファイル形式(例: 'JPEG', 'PNG', 'GIF')。Pillowで生成した画像の場合は None となります。
modestr画像のカラーモード(例: 'RGB'(フルカラー), 'L'(グレースケール), 'RGBA'(透過あり))。
sizetuple画像のサイズ。(幅, 高さ) のタプル形式で返されます(単位はピクセル)。
widthint画像の幅(ピクセル)。size[0] と同じ値です。
heightint画像の高さ(ピクセル)。size[1] と同じ値です。

実行可能なサンプルコード

以下のコードは、画像ファイルを読み込み、その詳細情報をコンソールに出力するスクリプトです。

※手元に画像ファイルがない場合でも動作するように、テスト用の画像を自動生成する処理を含めています。

from PIL import Image
import os

def check_image_info():
    # 読み込むファイル名
    filename = "sample_image.jpg"

    # テスト用にダミー画像を作成(ファイルが存在しない場合)
    if not os.path.exists(filename):
        create_test_image(filename)

    try:
        # 画像の読み込み
        with Image.open(filename) as img:
            
            print(f"=== 画像情報: {filename} ===")
            
            # 1. 画像フォーマット (例: JPEG, PNG)
            # ファイルから読み込んだ場合に設定されます
            print(f"Format: {img.format}")

            # 2. カラーモード (例: RGB, L, CMYK)
            # RGB: 一般的なカラー画像
            # L: グレースケール
            # RGBA: 透明度情報を含む
            print(f"Mode:   {img.mode}")

            # 3. 画像サイズ (幅, 高さ)
            # タプルで返されるため、個別に取得することも可能です
            print(f"Size:   {img.size}")
            
            # 個別に幅と高さを取得する場合
            width, height = img.size
            print(f" - Width:  {width} px")
            print(f" - Height: {height} px")

            # 補足: 画像の詳細情報(Exif情報など)
            # info属性には辞書形式でその他のメタデータが含まれています
            if img.info:
                print(f"Info Keys: {list(img.info.keys())}")

    except IOError:
        print("画像ファイルが見つかりません、または読み込めません。")

def create_test_image(filename):
    """検証用のJPEG画像を作成する関数"""
    # 800x600の赤い画像を作成
    img = Image.new("RGB", (800, 600), color=(255, 100, 100))
    img.save(filename, quality=90)
    print(f">> テスト画像を作成しました: {filename}")

if __name__ == "__main__":
    check_image_info()

各属性の詳細解説

image.format

ファイル形式を表す文字列が入ります。

  • 注意点: Image.new() でプログラム上で新規作成した画像や、メモリ上で処理中の画像の場合、この値は None になることがあります。ファイルとして保存(save)するまでは形式が確定しないためです。

image.mode

画像の「ピクセル形式」を表します。画像処理を行う際、モードが異なるとエラーになることがあるため、事前に確認して convert() メソッドで変換するのが一般的です。

  • 1: 1bit(白黒2値)
  • L: 8bitグレースケール
  • P: 8bitパレットカラー(GIFなど)
  • RGB: 3x8bit フルカラー
  • RGBA: RGB + アルファチャンネル(透明度)

image.size

画像の大きさを (width, height) のタプルで返します。

例えば width だけ欲しい場合は image.size[0]、height だけなら image.size[1] でアクセスできますが、Pythonのアンパック代入を使って w, h = image.size と書くのが最も可読性が高く推奨されます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次