Python 中的色譜

Muhammad Maisam Abbas 2024年2月15日
Python 中的色譜

本教程將討論在 Python 中建立具有色譜的影象的方法。

使用 Python 中的 PIL 庫的色譜

來自太陽的白光在通過稜鏡後向其成分中的色散稱為色譜。它包含肉眼可見的整個光波長範圍。換句話說,色譜包含原色(紅色、綠色和藍色)和所有原色的中間組合。Python Imaging Library PIL 用於在 Python 中處理影象。我們可以使用 PIL 庫來建立包含我們所需色譜的影象。出於本教程的目的,我們將在 Python 中使用 PIL 在具有所需尺寸的影象中重新建立以下色譜。

python 色譜與 pil 庫

以下程式碼示例向我們展示瞭如何使用 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)

輸出:

python 色譜與 pil 庫

我們在上面的程式碼中使用 PIL 複製了與示例影象中顯示的相同的色譜。

我們用 image = Image.new("RGB", (width2, height)) 建立了一個 RGB 影象,並用 image.putdata(colors) 填充了 8 位顏色值。這裡,colors 是一個元組列表,其中每個元組包含三個值(紅色、綠色和藍色)。正如我們所知,8 位顏色的值範圍從 0 到 255。我們初始化了三個變數 redgreenblue,每個變數代表一種原色的值。spectrum_ratio 用於簡化計算。它代表我們看到相同顏色的畫素數。我們的巢狀迴圈增加了一個 step,因為不需要遍歷許多具有相同顏色的不同畫素。step 變數是通過用 step = round(spectrum_ratio) 舍入 spectrum_ratio 來計算的。

正如我們所看到的,色譜從紅色開始,逐漸地紅色開始褪色,藍色在靠近影象中間的地方增加其強度。當色譜中只剩下藍色時,綠色開始變強,藍色從左到右慢慢開始褪色。當所有的藍色消失,只剩下綠色時,紅色的強度又開始增加,綠色開始褪色。當綠色完全消失時,影象結束,我們只剩下紅色。

上一段中描述的邏輯已在我們的巢狀迴圈中進行編碼,每次迭代後,我們使用 colors.append((red, green, blue)) 將新的 RGB 值附加到我們的列表 colors 中。影象的原始寬度已更改,因為我們已將 spectrum_ratio 舍入為 step。我們建立了 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