Spectres de couleurs en Python
Ce tutoriel discutera de la méthode pour créer des images avec un spectre de couleurs en Python.
Spectre de couleurs avec la bibliothèque PIL
en Python
La dispersion de la lumière blanche du soleil dans ses composants après avoir traversé un prisme s’appelle un spectre de couleurs. Il contient toute la gamme des longueurs d’onde lumineuses visibles à l’œil nu. En d’autres termes, un spectre de couleurs contient les couleurs primaires (rouge, vert et bleu) et toutes les combinaisons intermédiaires des couleurs primaires. La Python Imaging Library PIL
est utilisée pour travailler avec des images en Python. Nous pouvons utiliser la bibliothèque PIL
pour créer une image qui contient notre spectre de couleurs souhaité. Pour les besoins de ce tutoriel, nous allons recréer le spectre de couleurs suivant dans une image avec nos dimensions souhaitées en utilisant PIL
en Python.
L’exemple de code suivant nous montre comment recréer le même spectre de couleurs à l’intérieur d’une image de nos dimensions souhaitées avec la bibliothèque 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)
Production:
Nous avons reproduit le même spectre de couleurs que celui indiqué dans l’exemple d’image avec PIL
dans le code ci-dessus.
Nous avons créé une image RVB avec image = Image.new("RGB", (width2, height))
et l’avons remplie avec des valeurs de couleur 8 bits avec image.putdata(colors)
. Ici, colors
est une liste de tuples où chaque tuple contient trois valeurs (rouge, vert et bleu). Comme on le sait, les couleurs 8 bits ont des valeurs allant de 0 à 255. Nous avons initialisé trois variables red
, green
, et blue
, représentant chacune les valeurs d’une couleur primaire. Le spectrum_ratio
est utilisé pour simplifier le calcul. Il représente pour combien de pixels voyons-nous la même couleur. Notre boucle imbriquée est incrémentée d’un step
car il n’est pas nécessaire de parcourir de nombreux pixels différents ayant la même couleur. La variable step
est calculée en arrondissant le spectrum_ratio
avec step = round(spectrum_ratio)
.
Comme nous pouvons le voir, le spectre de couleurs commence par le rouge, progressivement la couleur rouge commence à s’estomper et la couleur bleue augmente son intensité près du milieu de l’image. Lorsqu’il ne reste que la couleur bleue dans le spectre de couleurs, la couleur verte commence à s’intensifier et la couleur bleue commence lentement à s’estomper de gauche à droite. Lorsque toute la couleur bleue a disparu et qu’il ne reste plus que la couleur verte, l’intensité de la couleur rouge recommence à augmenter et la couleur verte commence à s’estomper. L’image se termine lorsque la couleur verte a complètement disparu, et il ne nous reste plus que la couleur rouge.
La logique décrite dans le paragraphe précédent a été encodée dans notre boucle imbriquée, et nous ajoutons les nouvelles valeurs RVB dans notre liste colors
après chaque itération avec colors.append((red, green, blue))
. La largeur d’origine de l’image a été modifiée car nous avons arrondi le spectrum_ratio
en step
. Nous avons créé width2
pour faire face à ce changement. Après avoir écrit les valeurs de couleur dans notre nouvelle image, nous avons enregistré l’image avec 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