Index de l'article

Script - Image de 256^3 soit 16 777 216 couleurs

L'idée est ici d'incrémenter régulièrement toutes les combinaisons de 0,0,0 à 255,255,255.

Pour ne rater aucune combinaison je compte en binaire de
00000000 00000000 00000000
à
11111111 11111111 11111111
puis découperait cette valeur en 3 parties de 8 bits. Notez que je me demande si une autre méthode ne serait pas plus efficace mais pour l'instant je ne vois pas...

Génération des valeurs en binaire

for i in range (16777216):
    binaire=bin(i)[2:]
    while len(binaire)<24:
       binaire="0"+binaire

    r=int(binaire[0:8],2)
    v=int(binaire[8:16],2)
    b=int(binaire[16:24],2)
    print(r,v,b)

Générateur d'une image de 16 777 216 pixels avec 16 777 216 de couleurs allant de r,v,b=0,0,0 à 255,255,255

Je vous laisse le plaisir de lancer le script et de découvrir le résultat... Ouvrez l'image avec GIMP puis pipette pour visualiser les coordonnées et le valeur rvb. 

Notez que j'ai un petit doute sur les valeurs r,v,b de mes pixels. Aurai-je attends les limites de pillow?
Après expérimentation, je suis à deux doigts de penser qu'un enregistrement en jpg n'est pas une bonne idée car c'est un format compressé. J'ai donc testé avec largeur=hauteur= 2**5 et  img.save("4096par4096pix-couleur.bmp). C'est beaucoup mieux! Mais pour une image de 16 millions de pixels, j'ai une MemoryError... Donc j'en resterai là!

from PIL import Image #1

# taille image
largeur =2**12
hauteur =2**12

# creation image 16 millions de pixel couleurs allant de 0,0,0 à 255,255,255
img=Image.new("RGB",(largeur,hauteur),(255,255,255))

print("RAPPEL - enregistrement de l'image 4096par4096pix-couleur.jpg, l’image se trouve dans le dossier où le script est enregistré")

i=0

#3
for x in range (largeur):
    
    for y in range (hauteur):
   
        #4
        binaire=bin(i)[2:]
        
        while len(binaire)<24:
            binaire="0"+binaire
       
        r=int(binaire[0:8],2)
        v=int(binaire[8:16],2)
        b=int(binaire[16:24],2)
       
        #5
        img.putpixel((x,y),(r,v,b))
        
        i=i+1
        
    # Impression à chaque sortie de la boucle y pour faire patienter le testeur
    print("traitement de la ligne n° ",x+1, "de votre image") 

# Affichage finale
print("image de ",x+1,"par",y+1," pixel²","- Valeurs de r,v,b max atteintes ",r,v,b)
img.save("4096par4096pix-couleur.jpg")

Déçu ? Oui je trouve aussi qu'il est moche le dégradé

Pièce(s) jointe(s)
Download this file (4096par4096pix-couleur.jpg)4096par4096pix-couleur.jpg[ ]1590 kB
Download this file (CouleurAlea.jpg)CouleurAlea.jpg[ ]60 kB
Download this file (CouleurIncrement.jpg)CouleurIncrement.jpg[ ]0.8 kB
Download this file (NoirEtBlanc.jpg)NoirEtBlanc.jpg[ ]43 kB