1. ホーム
  2. スクリプト・コラム
  3. パイソン

ピロウズ画像色処理の具体的な活用方法

2022-01-02 01:37:49

Pillowは色処理モジュールImageColorを提供しており、RGB形式の色トリプル、16進数の色名(#ff0000)、英語の色単語("red")など、さまざまな形式の色をサポートしています。また、CSS(Cascading Style Sheets、ウェブページを修正するために使用)形式の色をRGB形式に変換することも可能です。

なお、ImageColor モジュールでは、色の大きさは考慮されません。例えば、"Red" は " red" と書くこともできます。

カラーネーミング

ImageColorは、おなじみのRGBカラーモードのほか、HSL(色相-飽和-明度)、HSB(HSV、色相-飽和-明度とも)カラーモードなど、ネーミング(値を一定のフォーマットで表すこと)のためのさまざまなカラーモードに対応しています。以下、HSLについて簡単に説明します。

  • H:色相(Hue)。値の範囲は0〜360で、0は"red"、120は"green"、240は"blue"を意味する。
  • S:彩度。色の純度を表し、0~100%の値をとる。0はグレー(gry)、100%は最も彩度の高い色の光を表す。
  • L: Lightness(明度)色の明るさを表し、0~100%の値をとります。0は"black"黒、50%は通常の色、100%は白を意味します。

<スパン 以下、HSLカラーモードを使って赤を表現すると、以下のような形式になります。

HSL(0,100%,50%)

この時の色は"pure red"で、RGB(255,0,0)に相当する色です。HSL/HSBについてもっと詳しく知りたい方は、リンクをクリックして行ってみてください。

ImageColorモジュールは比較的シンプルで、getrgb()とgetcolor()という2つの共通メソッドを提供するだけです。

getrgb() メソッド

この関数はその名の通り、色のRGB値を取得するためのもので、以下のような構文形式になっています。

PIL.ImageColor.getrgb(color)

使用例は以下の通りです。

from PIL import Image,ImageColor
# getrgb() method
color1=ImageColor.getrgb("blue")
print(color1)
color2=ImageColor.getrgb('#DCDCDC')
print(color2)
# Use HSL mode red
color3=ImageColor.getrgb('HSL(0,100%,50%)')
print(color3)

出力は次のようになります。

(0, 0, 255)

(220, 220, 220)

(255, 0, 0)

new()メソッドで新規に画像を作成することができますが、このとき、以下のようにImageColor.getrgb()も使用することが可能です。

# Use new() to draw a new image
im= Image.new("RGB", (200, 200), ImageColor.getrgb("#EEB4B4"))
im.save("C:/Users/Administrator/Desktop/xin.jpg")

以下のように画像を表示します。

図1:新しい画像

getcolor()

このメソッドも色値を取得するために使用されるという点では getrgb() と同様ですが、この関数が指定されたカラーモードの色値を取得できるように、mode パラメータが追加されていることが特徴です。構文形式は次のとおりです。

PIL.ImageColor.getcolor(color, mode)

パラメータは以下のように記述されています。

  • color: 色名。文字列形式で、色を表す英語か、16進数の色名です。サポートされていない色の場合、ValueErrorエラーが報告される。
  • mode: カラーモードを指定する。未対応のモードである場合、KeyErrorエラーが報告される。

使用例としては、以下のようになります。

color4=ImageColor.getcolor('#EEA9B8','L')
print(color4)
color5=ImageColor.getcolor('yellow','RGBA')
print(color5)

出力結果です。

191

(255, 255, 0, 255)

例)証明写真の背景色を変更する場合

import PIL.Image as Image
 
# ============1. Open image ============
img = Image.open('1.jpg')
 
#============2. Process the image ============
# Divide the image into small squares
img_array = img.load()
#traverse each pixel block and process the color
width, height = img.size#Get width and height
for x in range(0,width):
    for y in range(0,height):
        rgb = img_array[x,y]#Get the rgb of a pixel block
        r = rgb[0]
        g = rgb[1]
        b = rgb[2]
        if b>130 and r<120:#judge the rule
            img_array[x, y] = (255, 0, 0)
 
# ============3. Save the image ============
img.save("2.jpg")

Pillowの画像色処理の具体的な使用方法については、以上とさせていただきます。Pillowの画像カラーコンテンツについては、スクリプトハウスの過去記事を検索していただくか、引き続き以下の関連記事をご覧ください。