Espectros de cores em Python

Muhammad Maisam Abbas 15 fevereiro 2024
Espectros de cores em Python

Este tutorial irá discutir o método para criar imagens com espectro de cores em Python.

Espectro de cores com a biblioteca PIL em Python

A dispersão da luz branca do sol em seus componentes após passar por um prisma é chamada de espectro de cores. Ele contém toda a gama de comprimentos de onda de luz visíveis a olho nu. Em outras palavras, um espectro de cores contém as cores primárias (vermelho, verde e azul) e todas as combinações intermediárias das cores primárias. A Biblioteca de imagens Python PIL é usada para trabalhar com imagens em Python. Podemos usar a biblioteca PIL para criar uma imagem que contenha nosso espectro de cores desejado. Para o propósito deste tutorial, iremos recriar o seguinte espectro de cores em uma imagem com nossas dimensões desejadas usando PIL em Python.

espectro de cores python com a biblioteca pil

O exemplo de código a seguir nos mostra como recriar o mesmo espectro de cores dentro de uma imagem de nossas dimensões desejadas com a 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)

Produção:

espectro de cores python com a biblioteca pil

Nós replicamos o mesmo espectro de cores conforme mostrado na imagem de amostra com PIL no código acima.

Criamos uma imagem RGB com image = Image.new("RGB", (width2, height)) e a populamos com valores de cor de 8 bits com image.putdata (cores). Aqui, colors é uma lista de tuplas onde cada tupla contém três valores (vermelho, verde e azul). Como sabemos, as cores de 8 bits têm valores que variam de 0 a 255. Inicializamos três variáveis red, green, e blue, cada uma representando os valores de uma cor primária. O spectrum_ratio é usado para simplificar o cálculo. Representa quantos pixels vemos da mesma cor. Nosso loop aninhado é incrementado em uma step porque não há necessidade de percorrer muitos pixels diferentes com a mesma cor. A variável step é calculada arredondando o spectrum_ratio com step = round(spectrum_ratio).

Como podemos ver que o espectro de cores começa com o vermelho, gradativamente a cor vermelha começa a esmaecer, e a cor azul aumenta sua intensidade próximo ao meio da imagem. Quando só resta a cor azul no espectro de cores, a cor verde começa a se intensificar e a cor azul começa a desaparecer lentamente da esquerda para a direita. Quando toda a cor azul tiver desaparecido, e só sobrar a cor verde, a intensidade da cor vermelha começa a aumentar novamente, e a cor verde começa a desbotar. A imagem termina quando a cor verde desaparece completamente, e só ficamos com a cor vermelha novamente.

A lógica descrita no parágrafo anterior foi codificada em nosso loop aninhado e acrescentamos os novos valores RGB em nossa lista de colors após cada iteração com colors.append((red, green, blue)). A largura original da imagem foi alterada porque arredondamos o spectrum_ratio para um step. Criamos width2 para lidar com essa mudança. Depois de escrever os valores de cor em nossa nova imagem, salvamos a imagem com 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

Artigo relacionado - Python Graph

Artigo relacionado - Python Color