カラーコード
前回、matplotlibで印刷できる乱数表を作成する方法を紹介しました。
今回はPythonを使ってRGBと16進数カラーコード(Hex)を相互に変換する方法を紹介します。
まずRGBとは光の三原色であるRed(赤)、Green(緑)、Blue(青)を0から255までの256段階に分け、その組み合わせによって色を表現する方法です。
例えば白ならば(255, 255, 255)、黒ならば(0, 0, 0)といった感じです。
次に16進数カラーコード(Hex)とは白ならば「#ffffff」、黒ならば「#000000」といったような6つの数字かアルファベットによって色を表現する方法です。
シャープを除いた6桁の2桁ずつがR、G、Bを表していますが、RGBではそれぞれを0から255までの数字で表していたものが、16進数、つまり0から9とAからFの16個の値で表現されています。
ということで色を256段階で表現したとき、数値で表すのか、16進数で表すのかが違うということです。
それでは始めていきましょう。
PILを使ってHexをRGBに変換
まずはPILを使って16進数カラーコード(Hex)をRGBに変換してみます。
その場合、ImageColor.getcolor(hex, モード)を用い、モードを「”RGB”」にします。
from PIL import ImageColor
hex_code = "#000000"
rgb_code = ImageColor.getcolor(hex_code, "RGB")
print(rgb_code)
実行結果
(0, 0, 0)
ImageColor.getcolorのモードはRGBの他にグレースケール(”L”)があるようです。
またRGBからHexへの変換はできないようです。
PILを使わずにHexをRGBに変換
次にPILを使わずにHexをRGBに変換してみます。
先ほどお話しした通り、RGBが10進数(0から9の組み合わせの値)で色を表現しており、Hexは16進数で色を表現しています。
そしてHexの6桁の値は2桁ずつRGBを表しています。
ということでHexの値からシャープを取り除いて、それぞれを10進数に変換します。
ちなみに「int(16進数の値, 16)」とすると16進数の値を10進数の値に変換してくれます。
hex_code = "#ffffff"
hex_code = hex_code.lstrip("#")
rgb_code = [int(hex_code[i:i+2], 16) for i in range(0, 6, 2)]
print(rgb_code)
実行結果
[255, 255, 255]
RGBをHexに変換
次にRGBをHexに変換します。
この場合、formatを用いて変換します。
rgb_code = (255, 255, 255)
hex_code = "#{:02x}{:02x}{:02x}".format(*rgb_code)
print(hex_code)
実行結果
#ffffff
formatの前にある「”#{:02x}{:02x}{:02x}”」は出力形式を表しています。
またformatに渡す値は「*rgb_code」とアンパックしているので、「255, 255, 255」の3つの数字を渡しています(リストを渡しているわけではないです)。
つまり最初の255が最初の「{:02x}」に、2つ目の255が2つ目の「{:02x}」に、最後の255が最後の「{:02x}」に渡されて数値が変換されます。
このとき「02」は2桁の数字として表現するが、1桁の場合は0埋めをするという意味です。
そして「x」が16進数として表示するという指定です。
ちなみに「X(大文字)」とすると出力されるアルファベットは大文字に、「x(小文字)」だと出力されるアルファベットは小文字になります。
これでRGBをHexに、またHexをRGBに変換できるようになりました。
次回はPySimpleGUIでjpg画像を表示する方法を紹介します。
ではでは今回はこんな感じで。
コメント