Ascii Art

Résolu
Lumina -  
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonsoir! J'ai un mini problème avec mon programme pour créer un Ascii Art à partir d'une image.
Je voudrais savoir comment régler ce problème et surtout savoir si mon programme présente un problème (même si je suis sûre qu'il y en a sinon je ne serai pas ici).
Je sais qu'il faut que je convertisse d'abord l'image en niveaux de gris (c'est fait) mais la partie la plus compliquée reste la suite, transformer un pixel en caractère Ascii. Et c'est là où je bloque. Il faut aussi que j'ouvre l'image en fichier texte mais, je suis également bloquée dessus.

Lorsque je lance ce programme, on m'affiche comme message d'erreur à la ligne 22: "list indices must be integers, not str"

Je pense que c'est le mieux que je puisse faire avec mes compétences actuelles.
from PIL import Image
 
imageAscii= Image.open("Capture.jpg")
largeur, hauteur=imageAscii.size
imageBut=Image .new( "RGB" , ( largeur , hauteur ) )
 
for i in range (hauteur):
    for j in range (largeur):
        p=imageAscii.getpixel((j,i))
        gris=int((p[0]+p[1]+p[2])/3)
        p=(gris,gris,gris)
        imageBut.putpixel((j,i),p)
 
ascii =['@','%','#','*','+','=',':','.',' ']
 
f=open("asciiTest.txt","w")
 
for x in range (hauteur):
    for y in range (largeur):
        p=imageAscii.getpixel((x,y))
        if 225<gris<255:
            print(ascii[' '])
        if 200<gris<225:
            print(ascii['.'])
        if 175<gris<200:
            print(ascii[':'])
        if 150<gris<175:
            print(ascii['='])
        if 125<gris<150:
            print(ascii['+'])
        if 100<gris<125:
            print(ascii['*'])
        if 75<gris<100:
            print(ascii['#'])
        if 25<gris<50:
            print(ascii['%'])
        if 0<gris<25:
            print(ascii['@'])
 
f.close()
imageBut.save("Test.jpg")
imageBut.show()


Merci d'avance pour votre aide ^^ (si vous voulez bien m'aider)
A voir également:

5 réponses


 
Bonjour,

Si on essaie de comprendre
- à partir de l'image originale tu crées une nouvelle image niveau de gris
- donc pour transformer en ascii, ce sont les pixels de la nouvelle image qu'il faudrait traiter, pas l'image originale
- et imagebut, c'est l'image niveau de gris, pour afficher l'ascii, c'est le fichier .txt qu'il faut afficher
1