この記事は、Pythonの画像処理ライブラリPillow
の解説シリーズの最終回です。今回は、画像を構成する一つ一つの点であるピクセル
の色を直接読み取ったり、書き換えたりする方法について解説します。
1. ピクセルの色を取得する:getpixel()
.getpixel()
メソッドを使うと、指定した座標のピクセルの色情報を取得できます。座標は(x, y)
のタプルで指定し、原点(0, 0)
は画像の左上隅です。
戻り値は、画像のカラーモードに応じた色のタプルです。例えば、'RGBA'
モードの画像であれば、(赤, 緑, 青, 透明度)
の4つの値を持つタプルが返されます。
from PIL import Image
try:
img = Image.open('sample.png')
# (0, 0)と(50, 100)のピクセルの色を取得
rgba_at_0_0 = img.getpixel((0, 0))
rgba_at_50_100 = img.getpixel((50, 100))
print(f"座標(0, 0)の色: {rgba_at_0_0}")
print(f"座標(50, 100)の色: {rgba_at_50_100}")
except FileNotFoundError:
print("エラー: sample.pngが見つかりません。")
2. ピクセルの色を設定する:putpixel()
.putpixel()
メソッドは、.getpixel()
とは逆に、指定した座標のピクセルの色を特定の色に設定します。
putpixel((x, y), 色)
(x, y)
: 色を変更したいピクセルの座標。色
: 設定したい色。画像のモードに合わせたタプル(例:(255, 0, 0, 255)
)で指定します。
以下の例では、新しい画像を作成し、ループ処理を使ってピクセル単位で色を設定しています。
from PIL import Image
# 100x100の新しい透明な画像を作成
new_img = Image.new('RGBA', (100, 100))
# 左半分(xが0から49まで)を赤色に設定
for x in range(50):
for y in range(100):
# (Red, Green, Blue, Alpha)
new_img.putpixel((x, y), (255, 0, 0, 255))
new_img.save('pixel_art.png')
print("pixel_art.png を作成しました。")
3. ImageColor
モジュール
色のRGBA値を直接タプルで指定する代わりに、ImageColor
モジュールを使うと、'red'
や'blue'
といった一般的な色名を対応するRGBA値に変換できます。これにより、コードがより直感的で読みやすくなります。
from PIL import Image, ImageColor
# 'red'という色名をRGBAタプルに変換
red_rgba = ImageColor.getcolor('red', 'RGBA')
print(f"'red'のRGBA値: {red_rgba}") # 出力: (255, 0, 0, 255)
# 前の例の続きとして、右半分をライトグレイに設定
light_gray_rgba = ImageColor.getcolor('lightgray', 'RGBA')
# for x in range(50, 100):
# for y in range(100):
# new_img.putpixel((x, y), light_gray_rgba)
# new_img.save('pixel_art_updated.png')
まとめ
今回は、Pillowを使ったピクセル単位での画像操作について解説しました。.getpixel()
で特定の位置の色情報を読み取り、.putpixel()
で色を書き換えることができます。これらの低レベルな操作は、画像に図形を描画したり、特定の色を別の色に置き換えたりといった、より高度な画像処理の基礎となります。
この3回にわたるシリーズで、Pillowを使った基本的な画像操作は一通りマスターできたはずです。ぜひこれらの知識を応用して、自分だけの画像処理プログラムを作成してみてください。