このページでは Pillow (PIL) で利用可能な色名の調べ方について説明します。
Pillow は Python でお手軽に画像を扱うことのできるライブラリであり使用している方も多いのではないかと思います。この Pillow では色を扱うことも可能で、例えば ImageDraw
モジュールの text
メソッドで描画する文字列の色を設定したり、rectangle
メソッド等で描画する図形の塗りつぶしの色や枠線の色を設定することが可能です。
そして、これらの色はピクセル値やカラーコード (#rrggbb
や #rgba
等の形式の文字列)で指定することも可能ですが、“色名” で指定することも可能です。例えば 'red'
などを指定すれば色を赤色に設定することが可能です。そして、この指定可能な色名は多数存在しています。
では、具体的に指定可能な色名にはどんなものが存在するのでしょうか?
その調べ方について説明していきます。
Contents
Pillow で利用可能な色名の調べ方
では、Pillow の各種メソッドや関数等で図形や文字列の描画を行う際に指定可能な色名の調べ方について説明していきます。
ImageColor.colormap
を出力して調べる
色名を調べるだけであれば簡単で、Pillow のモジュールの1つである ImageColor
で定義されている colormap
を調べたり、出力したりすれば良いだけです。
この colormap
は下記のような辞書になります。これは ImageColor
モジュール(ImageColor.py
)で定義されていますので、このファイルを探し出して中身を見てやれば Pillow で利用可能な色名を調べることができます。
colormap = {
"aliceblue": "#f0f8ff",
"antiquewhite": "#faebd7",
"aqua": "#00ffff",
"aquamarine": "#7fffd4",
"azure": "#f0ffff",
"beige": "#f5f5dc",
"bisque": "#ffe4c4",
"black": "#000000",
"blanchedalmond": "#ffebcd",
〜略〜
}
この colormap
のキーが Pillow で指定可能な色名となります。また各キーの値がその色名の色を表しています。
また、わざわざスクリプトの中身を読まなくても 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
は前述の通り辞書であり、キーが “色名” を表しており、値がその色名の “色” を表しています。
この値はカラーコード形式の文字列で下の図のように #
の次の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 は画像を扱うライブラリであり、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 で利用可能な色名と、その色名の実際の色を一覧化するようなことも可能です。プログラミングを利用することで、こういった一覧化や見える化なども簡単に行うことができますので、こういった観点のプログラムを作ってみるのも面白いと思います!