【Pillow/Python】Pillowで利用可能な色名の調べ方

このページにはプロモーションが含まれています

このページでは Pillow (PIL) で利用可能な色名の調べ方について説明します。

Pillow は Python でお手軽に画像を扱うことのできるライブラリであり使用している方も多いのではないかと思います。この Pillow では色を扱うことも可能で、例えば ImageDraw モジュールの text メソッドで描画する文字列の色を設定したり、rectangle メソッド等で描画する図形の塗りつぶしの色枠線の色を設定することが可能です。

PIllowで設定可能な様々な色を示す図

そして、これらの色はピクセル値やカラーコード (#rrggbb#rgba 等の形式の文字列)で指定することも可能ですが、“色名” で指定することも可能です。例えば 'red' などを指定すれば色を赤色に設定することが可能です。そして、この指定可能な色名は多数存在しています。

では、具体的に指定可能な色名にはどんなものが存在するのでしょうか?

その調べ方について説明していきます。

Pillow で利用可能な色名の調べ方

では、Pillow の各種メソッドや関数等で図形や文字列の描画を行う際に指定可能な色名の調べ方について説明していきます。

ImageColor.colormap を出力して調べる

色名を調べるだけであれば簡単で、Pillow のモジュールの1つである ImageColor で定義されている colormap を調べたり、出力したりすれば良いだけです。

この colormap は下記のような辞書になります。これは ImageColor モジュール(ImageColor.py)で定義されていますので、このファイルを探し出して中身を見てやれば Pillow で利用可能な色名を調べることができます。

colormapの定義
colormap = {
    "aliceblue": "#f0f8ff",
    "antiquewhite": "#faebd7",
    "aqua": "#00ffff",
    "aquamarine": "#7fffd4",
    "azure": "#f0ffff",
    "beige": "#f5f5dc",
    "bisque": "#ffe4c4",
    "black": "#000000",
    "blanchedalmond": "#ffebcd",
    〜略〜
}

この colormap のキーが Pillow で指定可能な色名となります。また各キーの値がその色名の色を表しています。

colormapの辞書におけるキーと値の説明図

また、わざわざスクリプトの中身を読まなくても colormap の全キー名を出力してやれば Pillow で指定可能な色を調べることができます。単に colormap のキー名を出力してやれば良いため、例えば下記のようなスクリプトを作成して実行してやれば Pillow で利用可能な全色名を列挙することができます。

利用可能な色名の出力
from PIL import ImageColor

for color_name in ImageColor.colormap.keys():
    print(color_name)

上記スクリプトを実行すれば下記のように色名が出力され、この出力された文字列が Pillow で利用可能な色名となります。

aliceblue
antiquewhite
aqua
aquamarine
azure
beige
bisque
black

スポンサーリンク

色名に対する色の調べ方

さて、ここまで説明してきた内容に基づいてスクリプトを調べたり colormap のキー名を出力したりすることで Pillow で利用可能な色名、すなわち Pillow の各モジュールやクラスで用意されている関数やメソッドに指定可能な色名を調べることができます。

ですが、この色名だけ見ても “その色名を指定した時にどんな色になるかがピンと来ない” という方も多いのではないかと思います。

PIllow で利用可能な色名が分かったとしても、その色名を指定したときにどんな色で図形や文字列が描画されるかが分からなければ意味がないですよね…。

ということで、次は指定する色名と実際の色との対応の調べ方について説明していきます。

カラーコードで色を再現する

一番単純な方法は、色名を調べるときにも活躍した colormap を調べる方法になります。colormap は前述の通り辞書であり、キーが “色名” を表しており、値がその色名の “色” を表しています。

colormapの辞書におけるキーと値の説明図

この値はカラーコード形式の文字列で下の図のように # の次の2桁が赤色の強み、その次の2桁が緑色の強み、最後の2桁が青色の強みを示しています。これらの各色の強みは16進数の数値として表現されています。

カラーコードの説明図

なので、このカラーコードの各桁の値が何を表しているかを理解しておけば、ある程度カラーコードから色を想像できるのではないかと思います。

もっと具体的に実際の色を知りたいのであれば、このカラーコードから色を再現して目で色を確認するようなことも可能です。パワーポイントやペイントなどの色を扱うアプリでは、図形や文字等の色をカラーコードや赤・緑・青の強みで指定できることが多いです。例えばパワーポイントであれば、色の指定を下の図のような画面で行うことができ、ここではカラーコードを指定可能です。

パワーポイントでのカラーコードによる伊の設定

なので、colormap から特定の色名のカラーコードを調べ、上記のようにパワーポイント等でカラーコードを指定して色を再現してやれば、色名に対応する実際の色を目で確認することができるようになります。

また、colormap から特定の色名のカラーコードを調べるためには、下記のように colormap の各要素を全て列挙するのが早いです。

全色名のカラーコードの表示
from PIL import ImageColor

for color in ImageColor.colormap.items():
    print(color)

このスクリプトを実行すれば下記のような出力が得られ、出力された各要素のキーが色名、値がカラーコードを表していますので、これにより各色名のカラーコードを調べることができます。

('aliceblue', '#f0f8ff')
('antiquewhite', '#faebd7')
('aqua', '#00ffff')
('aquamarine', '#7fffd4')
('azure', '#f0ffff')
('beige', '#f5f5dc')
('bisque', '#ffe4c4')
('black', '#000000')

また、下記のように特定の色名を colormap のキーに指定してやれば、その特定の色名のカラーコードのみを出力することも可能です。

特定の色名のカラーコードの表示
from PIL import ImageColor

print(ImageColor.colormap['aliceblue'])

実際に全色を使って図形を描画してみる

上記の方法によってカラーコードから実際の色を調べることはできるのですが、カラーコードに対応する色を一つ一つ確認する必要があって目的の色を見つけるのに時間がかかってしまいます。

目的の色を見つけ出すには、全ての色名と実際の色を一覧で確認できた方が楽ですよね。

そんな場合は、実際に全ての色で図形を描画した結果を画像化してみることをオススメします。

例えば、画像の中に colormap の要素の数だけの長方形を描画し、それらの各長方形の色として colormap のキー名を指定してやれば、Pillow で利用可能な色名で実際に描画した長方形を一覧で確認することが可能です。

さらに、各長方形の中に色名を文字列として描画してやれば、これらの描画結果から色名と実際の色の対応も確認することが可能です。例えば、下図のような感じですね。

Pillowで利用可能な色名と、その色名に対する実際の色を一覧化した結果

Pillow は画像を扱うライブラリであり、ImageDraw モジュールを利用することで長方形や文字列の描画も楽々行えます。

ということで、上記で説明した長方形と文字列を描画するスクリプトを紹介しておきます。

そのスクリプトの例は下記となります。スクリプトの先頭付近に登場する変数 font_name は描画する文字列のフォントを指定するためのもので、Mac 用と Windows 用とで行を分けて設定するようにしているので注意してください。Windows を利用されている場合は font_name = 'meiryo.ttc' の行のコメントアウトを外して実行すればスクリプトが正常に動作するはずです。Mac の場合はスクリプトを変更しなくても正常に動作するはずです。

全色名の長方形の描画
from PIL import Image, ImageDraw, ImageColor, ImageFont
import math

# フォントファイルのファイル名
# For Mac
font_name = 'Menlo.ttc'
# For WIndows
# font_name = 'meiryo.ttc'

# フォントのサイズ
font_size = 20

# 各長方形の幅と高さ
rect_width = 300
rect_height = 30

# 描画する長方形の数
color_num = len(ImageColor.colormap)

# 横/縦方向に並べる長方形の数
rect_h_num = 8
rect_v_num = math.ceil(color_num / rect_h_num)

# 長方形の数と長方形の幅/高さに応じたサイズのImageオブジェクトの生成
image = Image.new('RGB', (rect_width * rect_h_num, rect_height * rect_v_num), (255, 255, 255))

# Drawオブジェクトの生成
draw = ImageDraw.Draw(image)

# フォントオブジェクトの生成
font = ImageFont.truetype(font_name, font_size)

# 全色名に対応する色で長方形を描画
for i, color_name in enumerate(ImageColor.colormap.keys()):

    # 各長方形の左上/右下の座標を計算
    h = i % rect_h_num
    v = i // rect_h_num

    x1 = h * rect_width
    y1 = v * rect_height
    x2 = (h + 1) * rect_width - 2 # 隙間が開くように-2で調整
    y2 = (v + 1) * rect_height - 2 # 隙間が開くように-2で調整

    # 文字列の色の決定
    r, g, b = ImageColor.getcolor(color_name, 'RGB')
    
    if r + g + b < (256 + 256 + 256) / 2:
        # color_nameの色が暗い場合
        text_color = 'white'
    else:
        # color_nameの色が明るい場合
        text_color = 'black'

    # color_nameの色で長方形を描画
    draw.rectangle(xy=(x1, y1, x2, y2), fill=color_name)

    # 長方形の中心にcolor_nameを文字列として描画
    xc = (x1 + x2) / 2
    yc = (y1 + y2) / 2
    draw.text((xc, yc), anchor='mm', text=color_name, fill=text_color, font=font)

# 画像をファイル保存
image.save('all_colors.png')

スクリプトを実行すれば下の図のような画像が all_colors.png としてファイル保存されます(Windows の場合は文字列のフォントが異なるはずです)。

スクリプトの実行によって生成される画像

各長方形は Pillow で利用可能な色名で塗りつぶしています。そして長方形の中に描画されている文字列が、その長方形の色の色名となります。

Pillow 10.2.0 の場合は全部で 148 種類の色名が利用可能であり、これらの全ての色名で長方形が塗りつぶしされることになります。したがって、この画像を見ることで Pillow で利用可能な色名だけでなく、その色名を指定したときに使用される実際の色も確認することができます。

ちなみに、描画する文字列のフォントは下記で、

フォントの指定
# フォントファイルのファイル名
# For Mac
font_name = 'Menlo.ttc'
# For WIndows
# font_name = 'Meiryo.ttf'

描画する文字列の文字のサイズは下記で、

フォントのサイズの指定
# フォントのサイズ
font_size = 20

各長方形の幅と高さは下記で、

長方形の幅と高さの指定
# 各長方形の幅と高さ
rect_width = 300
rect_height = 30

長方形を横に並べる個数は下記でそれぞれ指定していますので、この辺りは好みに合わせて変更していただければと思います。

長方形を横に並べる個数の指定
# 横/縦方向に並べる長方形の数
rect_h_num = 8

前述で示したような画像が生成できれば、後はこの中から好みの色を見つけ出し、その色の色名を各種メソッドや関数の引数に指定してやれば良いだけです!

スポンサーリンク

まとめ

このページでは Pillow (PIL) で利用可能な色名の調べ方について説明しました!

また、各色名の実際の色の調べ方についても紹介しました!

Pillow では引数等でピクセル値を直接指定して色を設定することも可能ですが、色名で指定して色を設定することも可能です。そして、指定可能な色名や色名に対応する色は ImageColor.colormap から調べることが可能です。

また、実際に指定可能な色名の長方形を Pillow を利用して描画することで、Pillow で利用可能な色名と、その色名の実際の色を一覧化するようなことも可能です。プログラミングを利用することで、こういった一覧化や見える化なども簡単に行うことができますので、こういった観点のプログラムを作ってみるのも面白いと思います!

同じカテゴリのページ一覧を表示