画像処理を行う前に、対象となる画像がどのような特性(JPEGなのかPNGなのか、カラーなのか白黒なのか、サイズはいくつか)を持っているかを確認することは非常に重要です。
Pillowの Image オブジェクトには、これらの情報を格納した属性が用意されており、読み込んだ直後に簡単にアクセスできます。
目次
画像情報の主要属性一覧
Image オブジェクトが持つ、画像のメタデータに関する主要な属性は以下の通りです。
| 属性名 | 戻り値の型 | 意味・内容 |
format | str | 画像のファイル形式(例: 'JPEG', 'PNG', 'GIF')。Pillowで生成した画像の場合は None となります。 |
mode | str | 画像のカラーモード(例: 'RGB'(フルカラー), 'L'(グレースケール), 'RGBA'(透過あり))。 |
size | tuple | 画像のサイズ。(幅, 高さ) のタプル形式で返されます(単位はピクセル)。 |
width | int | 画像の幅(ピクセル)。size[0] と同じ値です。 |
height | int | 画像の高さ(ピクセル)。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 と書くのが最も可読性が高く推奨されます。
