【Python基礎】RGBと16進数カラーコード(Hex)を相互に変換する方法

  • URLをコピーしました!
目次

カラーコード

前回、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画像を表示する方法を紹介します。

ではでは今回はこんな感じで。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次