Espectros de color en Python

Muhammad Maisam Abbas 15 febrero 2024
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.

espectro de color de python con la biblioteca pil

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:

espectro de color de python con la biblioteca pil

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").

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

Artículo relacionado - Python Graph

Artículo relacionado - Python Color