Python 中的色谱

Muhammad Maisam Abbas 2021年10月2日
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