Espectros de color en Python
Este tutorial discutirá el método para crear imágenes con espectro de color en Python.
Espectro de color con la biblioteca PIL
en Python
La dispersión de la luz blanca del sol en sus componentes después de pasar a través de un prisma se llama espectro de color. Contiene toda la gama de longitudes de onda de luz visibles a simple vista. En otras palabras, un espectro de colores contiene los colores primarios (rojo, verde y azul) y todas las combinaciones intermedias de los colores primarios. La Biblioteca de imágenes de Python PIL
se utiliza para trabajar con imágenes en Python. Podemos utilizar la biblioteca PIL
para crear una imagen que contenga nuestro espectro de color deseado. Para el propósito de este tutorial, recrearemos el siguiente espectro de color en una imagen con nuestras dimensiones deseadas usando PIL
en Python.
El siguiente ejemplo de código nos muestra cómo recrear el mismo espectro de color dentro de una imagen de nuestras dimensiones deseadas con la biblioteca 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)
Producción:
Replicamos el mismo espectro de color que se muestra en la imagen de muestra con PIL
en el código anterior.
Creamos una imagen RGB con image = Image.new("RGB", (width2, height))
y la llenamos con valores de color de 8 bits con image.putdata(colors)
. Aquí, colors
es una lista de tuplas donde cada tupla contiene tres valores (rojo, verde y azul). Como sabemos, los colores de 8 bits tienen valores que van de 0 a 255. Inicializamos tres variables red
, green
y blue
, cada una de las cuales representa los valores de un color primario. El spectrum_ratio
se utiliza para simplificar el cálculo. Representa cuántos píxeles vemos del mismo color. Nuestro bucle anidado se incrementa en un step
porque no hay necesidad de recorrer muchos píxeles diferentes que tienen el mismo color. La variable step
se calcula redondeando la spectrum_ratio
con step = round(spectrum_ratio)
.
Como podemos ver que el espectro de color comienza con el rojo, gradualmente el color rojo comienza a desvanecerse y el color azul aumenta su intensidad cerca de la mitad de la imagen. Cuando solo queda color azul en el espectro de colores, el color verde comienza a intensificarse y el color azul comienza a desvanecerse lentamente de izquierda a derecha. Cuando todo el color azul ha desaparecido, y solo queda el color verde, la intensidad del color rojo comienza a aumentar nuevamente y el color verde comienza a desvanecerse. La imagen termina cuando el color verde ha desaparecido por completo, y solo nos queda el color rojo nuevamente.
La lógica descrita en el párrafo anterior se ha codificado en nuestro bucle anidado, y agregamos los nuevos valores RGB en nuestra lista colores
después de cada iteración con colors.append((red, green, blue))
. El ancho original de la imagen se ha cambiado porque hemos redondeado la relación_espectro
en step
. Creamos width2
para hacer frente a este cambio. Después de escribir los valores de color en nuestra nueva imagen, guardamos la imagen con 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