Python のカラースペクトル

Muhammad Maisam Abbas 2021年12月25日
Python のカラースペクトル

このチュートリアルでは、Python でカラースペクトルを使用して画像を作成する方法について説明します。

Python の PIL ライブラリを使用したカラースペクトル

プリズムを通過した後の太陽からその成分への白色光の分散は、カラースペクトルと呼ばれます。人間の裸眼で見える全範囲の光の波長が含まれています。つまり、カラースペクトルには、原色(赤、緑、青)と原色のすべての中間の組み合わせが含まれます。Python Imaging Library PIL は、Python で画像を操作するために使用されます。PIL ライブラリを使用して、目的のカラースペクトルを含む画像を作成できます。このチュートリアルでは、Python の PIL を使用して、目的のサイズの画像に次のカラースペクトルを再作成します。

pil ライブラリを使用した Python カラースペクトル

次のコード例は、PIL ライブラリを使用して、目的のサイズの画像内に同じカラースペクトルを再作成する方法を示しています。

from PIL import Image


def color_spectrum(height, width):

    spectrum_ratio = 255 * 6 / width

    red = 255
    green = 0
    blue = 0

    colors = []

    step = round(spectrum_ratio)

    for i in range(0, height):
        for j in range(0, 255 * 6 + 1, step):
            if j > 0 and j <= 255:
                blue += step
            elif j > 255 and j <= 255 * 2:
                red -= step
            elif j > 255 * 2 and j <= 255 * 3:
                green += step
            elif j > 255 * 3 and j <= 255 * 4:
                blue -= step
            elif j > 255 * 4 and j <= 255 * 5:
                red += step
            elif j > 255 * 5 and j <= 255 * 6:
                green -= step

            colors.append((red, green, blue))

    width2 = int(j / step + 1)

    image = Image.new("RGB", (width2, height))
    image.putdata(colors)
    image.save("Picture2.png", "PNG")


if __name__ == "__main__":
    create_spectrum(100, 300)

出力:

pil ライブラリを使用した Python カラースペクトル

上記のコードの PIL を使用して、サンプル画像に示されているのと同じカラースペクトルを複製しました。

image = Image.new("RGB", (width2, height)) を使用して RGB 画像を作成し、image.putdata(colors) を使用して 8 ビットの色の値を入力しました。ここで、colors はタプルのリストであり、各タプルには 3つの値(赤、緑、青)が含まれています。ご存知のように、8 ビットカラーの値は 0〜255 です。3つの変数 redgreen、および blue を初期化し、それぞれが原色の値を表します。spectrum_ratio は、計算を単純化するために使用されます。これは、同じ色がいくつのピクセルで表示されるかを表します。同じ色の多くの異なるピクセルをループする必要がないため、ネストされたループは 1 ステップずつインクリメントされます。step 変数は、spectrum_ratiostep = round(spectrum_ratio) で四捨五入して計算されます。

カラースペクトルが赤で始まることがわかるように、徐々に赤の色が薄くなり始め、青の色は画像の中央近くでその強度を増加させます。カラースペクトルに青色のみが残っている場合、緑色は濃くなり始め、青色は左から右にゆっくりと消え始めます。青色がすべて消え、緑色だけが残ると、赤色の強度が再び増加し始め、緑色が薄くなり始めます。緑色が完全に消えると画像は終了し、再び赤色だけが残ります。

前の段落で説明したロジックはネストされたループでエンコードされており、colors.append((red, green, blue)) を使用して、各反復後に新しい RGB 値をリスト colors に追加します。spectrum_ratiostep に丸めたため、画像の元の幅が変更されました。この変更に対応するために、width2 を作成しました。新しい画像に色の値を書き込んだ後、image.save("Picture2.png", "PNG") で画像を保存しました。

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

関連記事 - Python Graph

関連記事 - Python Color