1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166
| import os
from PIL import Image
from tkinter import Tk
from tkinter import Canvas
from tkinter import Button
from tkinter import Label
def puissance(base, exposant): #On définit la fonction puissance
S = 1
for i in range(1, exposant+1):
S = S * base
return S
while 1: # boucle sur le choix
print(" 1 - Créer un flash-code à partir d'un mot de 8 caractères ASCII\n")
print(" 2 - Afficher un flash-code à partir d'un fichier image png8x8\n")
print(" 3 - Décoder un flash-code à partir d'un fichier image png8x8\n")
print(" 4 - Sortie\n")
Choix = input("Faites votre choix :\n")
#Choix 1 : Création du fichier png à partir de la saisie de 8 caractères
if Choix=='1':
Mot_binaire =[[]]
for i in range(8): # boucle pour entrer les 8 caractères
lettre=input("Entrez une lettre : ")
chiffrebin=bin(ord(lettre))
#print("numero de la lettre=",ord(lettre),'\n')
#print("chiffrebin=",chiffrebin,'\n')
#print("len=",len(chiffrebin),'\n')
Mot_binaire.append(chiffrebin)
#
L,H=8,8
im1=Image.new("RGB",(L,H)) # creation d'une image 8x8
for y in range(H):
#print("Mot_binaire[y+1]=",Mot_binaire[y+1])
longmot = len(Mot_binaire[y+1])
x=0
r,v,b=0,0,0 # 0,0,0 correspond à un pixel noir
im1.putpixel((x,y),(r,v,b)) # on met un pixel Noir en premier
if longmot == 8:
im1.putpixel((x+1,y),(r,v,b)) # si 8, alors on met 2eme pixel Noir
for x in range(2,longmot,1): # pour chaque bit
if Mot_binaire[y+1][x]=='0':
gris=0 # si bit = 0 ,on met pixel noir
else:
gris=255 # si bit = 1 , on met pixel blanc
r,v,b=gris,gris,gris
if longmot == 9:
im1.putpixel((x-1,y),(r,v,b))
else:
im1.putpixel((x,y),(r,v,b))
fichier = input("Entrez le nom du fichier image à créer (.png) ? ")
chemin = input("Entrez le nom du répertoire ou stocker l'image ? ")
NomComplet = chemin+fichier
im1.save(NomComplet) # Sauvegarde du fichier png
print("Le fichier ",NomComplet," a été correctement sauvé\n")
#-----------------------------------------------------#
# #
# Choix 2 : Lecture d'un fichier png #
# Affichage du Flashcode 8x8 #
# #
#-----------------------------------------------------#
elif Choix == '2':
fichier = input("Entrez le nom du fichier image à lire (.png)? ")
chemin = input("Entrez le nom du répertoire ou est stocké l'image? ")
NomComplet = chemin + fichier
print("Nom du fichier à lire :",NomComplet)
#
if os.path.isfile(NomComplet):
# print("Le fichier existe")
im1 = Image.open(NomComplet) # ouverture du fichier image
fenetre = Tk()
texte=Label(fenetre, text="Flash-code",fg='black',bg='cyan')
texte.pack()
fenetre.attributes('-fullscreen', 1)
#
# Définit les dimensions du canevas
zone_dessin = Canvas(fenetre, width=400, height=400,bg="white")
zone_dessin.pack() #Affiche le canevas
L,H = im1.size # L = largeur de limage,
# H = sa hauteur, en pixels
# print(" L=",L,"H=",H)
if L==8 and H==8:
for y in range(H): # on balaie toutes les lignes de limage
#print (y)
#
for x in range(H):
p = im1.getpixel((x,y))
# on calcule le niveau de gris (gris « moyenne » ici)
gris = (p[0]+p[1]+p[2])//3
#print(" valeur de gris",gris)
X = x*50
Y = y*50+25
if gris == 0:
zone_dessin.create_line(X,Y,X+50,Y,width=50,fill='black')
#
# fin de la boucle sur Y
# affichage de la fenetre avec un bouton Quit pour quitter
Button(fenetre, text="Quit", command=fenetre.destroy).pack()
fenetre.mainloop()
else:
print("Erreur, le fichier png n'est pas de dimension 8x8\n")
else: # cas d'erreur de saisie sur le nom du fichier
print("Le fichier n'existe pas")
#
#-----------------------------------------------------#
# #
# Choix 3 : Lecture d'un fichier png (Flashcode) #
# Decodage des caractères #
# #
#-----------------------------------------------------#
elif Choix == '3':
#
fichier = input("Entrez le nom du fichier image à lire (.png)? ")
chemin = input("Entrez le nom du répertoire ou est stocké l'image? ")
NomComplet = chemin + fichier
print("Nom du fichier à lire :",NomComplet,"\n")
#
if os.path.isfile(NomComplet):
# print("Le fichier existe")
im1 = Image.open(NomComplet) # ouverture du fichier image
L,H = im1.size # L = largeur de limage,
# H = sa hauteur, en pixels
mot = '' # initialisation du mot
for y in range(H): # on balaie toutes les lignes de limage
codeASCII = 0 # on initialise le codeASCII de la lettre
#print (y)
#
for x in range(L): # pour chaque ligne,
# on balaie toutes les colonnes (bit)
p = im1.getpixel((x,y))
# p[0] est la composante rouge
# p[1] la composante verte, et p[2] la composante bleue
# on calcule le niveau de gris (gris « moyenne » ici)
gris = (p[0]+p[1]+p[2])//3
# print(" valeur de gris",gris)
if gris == 255: # si gris = 255 alors on a un blanc
# on ajouter la puissance de 2
codeASCII=codeASCII+puissance(2,7-x)
#
#print("chiffre=",chiffre)
#print(" en caractere=",chr(chiffre),'\n')
# conversion du codeASCII en caractere , on l'ajoute au mot
mot = mot +chr(codeASCII)
#
print("Le fichier contient les caractères :",mot,'\n')
else: # le fichier n'existe pas
print("Le fichier n'existe pas")
#
#-----------------------------------------------------#
# #
# Choix 4 : Sortie de la boucle #
# #
#-----------------------------------------------------#
elif Choix == '4':
break;
else:
print("Valeur Invalide : Choix à faire parmi 1, 2, 3 ou 4")
os.system("pause") |
Partager