Python 中的色谱
本教程将讨论在 Python 中创建具有色谱的图像的方法。
使用 Python 中的 PIL
库的色谱
来自太阳的白光在通过棱镜后向其成分中的色散称为色谱。它包含肉眼可见的整个光波长范围。换句话说,色谱包含原色(红色、绿色和蓝色)和所有原色的中间组合。Python Imaging Library 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)
输出:
我们在上面的代码中使用 PIL
复制了与示例图像中显示的相同的色谱。
我们用 image = Image.new("RGB", (width2, height))
创建了一个 RGB 图像,并用 image.putdata(colors)
填充了 8 位颜色值。这里,colors
是一个元组列表,其中每个元组包含三个值(红色、绿色和蓝色)。正如我们所知,8 位颜色的值范围从 0 到 255。我们初始化了三个变量 red
、green
和 blue
,每个变量代表一种原色的值。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")
保存图像。
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