J'aimerai faire l'inverse de mon programme,je bloque passer de image a matrice [Résolu]

Signaler
-
Messages postés
31640
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
20 avril 2021
-
j'aimerai passer de l'image que j'ai cree a la matrice mais je bloque si vous avez une idee sa serez cool merci :)
from PIL import Image

class Encryption:

    def __init__(self):
        self.string = ""

    def __call__(self):
        self.string = input("Enter your message (< 400 char) :\n")
        output = self.encrypt()

        return output

    def encrypt(self):
        global matrix
        if len(self.string) > 400:
            print("The message is too long. This must be under 400 characters long.")
            return None
        elif len(self.string) < 400:
            for i in range(400-len(self.string)):
                self.string += " "

        matrix = [
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
            [],
        ]

        index_str = 0
        for row in range(20):
            for col in range(20):
                matrix[row].append(ord(self.string[index_str]))
                index_str += 1
        coef = 100
        
        
        image = Image.new("RGB",(len(matrix[0])*coef,len(matrix)*coef))
        for ligne,col in [(x,y) for x in range(len(matrix)) for y in range(len(matrix[0]))]:
            couleur = matrix[ligne][col]
            couleurs = (couleur//(256*256),(couleur-(couleur//(256*256))*256*256)//256,couleur%256)
            for x,y in [(x,y) for x in range(coef) for y in range(coef)]:
                image.putpixel((col*coef+x, ligne*coef+y), couleurs)
        image.show ()
        image.save('image.png')
        return matrix


class Decryption:

    def __init__(self):
        self.matrix = []

    def __call__(self, matrix):
        self.matrix = matrix
        message = self.decrypt()

        return message

    def decrypt(self):
        message = ""

        for row in range(len(self.matrix)):
            for col in range(len(self.matrix[row])):
                message += chr(self.matrix[row][col])

        return message


encrypt_tool = Encryption()
decrypt_tool = Decryption()

output = encrypt_tool()

for i in output:
    print(i)

transmitted_message = decrypt_tool(output)
print("Le message était : ",transmitted_message)>

4 réponses

Messages postés
15261
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
21 avril 2021
836
bonjour, ne suffit-il pas d'inverser l'assignation en ligne 56?
bonjours, merci pour votre reponce j'ai essayer mais j'ai pas réussi après j'ai peut-être fait une erreur
es que vous pourriez me montrer comment vous arriez fait ?
s'il vous plaît
Messages postés
15261
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
21 avril 2021
836
je n'ai rien essayé.
>
Messages postés
15261
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
21 avril 2021

je vais continuer a chercher merci bcp pour cette piste yg_be
si d'autres personnes on des idee je serez ouvert a toute les propositions merci d'avance
Messages postés
31640
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
20 avril 2021
7 573 > telte
bonjour,
cela semble simple, tu charges l'image dans un tableau, et soit tu reconstitues le code 16 millions de couleurs avec les 3 RVB, soit tu traites directement le B
je charge l'image dans un tableau grâce a la bibliothèque numpy? ou il faut faire autrement car je connais que cette façon pour l'instant
Messages postés
31640
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
20 avril 2021
7 573
pourquoi tergiverser ? tu connais une méthode tu y vas, programmer c'est essayer, rechercher, découvrir, échouer, recommencer
>
Messages postés
31640
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
20 avril 2021

merci pour vos conseil
Messages postés
31640
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
20 avril 2021
7 573 > telte
As-tu avancé ?

je viens d'essayer avec numpy, on se rend alors compte d'une particularité, on charge un tableau de 4 millions de triplés RGB ;-) cela est du au coefficient 100 dans la création de l'image, c'est pratique pour voir les couleur, mais le but étant de cacher un texte, il serait mieux de repasser à un coefficient 1 pour faire l'image à décrypter, on aurait alors un tableau de 400 triplés, plus facile à exploiter.
>
Messages postés
31640
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
20 avril 2021

j'ai pas encore reussi mais numpy j'ai abandonné tres vite et j'etais deja passer en coef 1
<code python>class Decryption:

def __init__(self):
self.matrix = []

def __call__(self, matrix):
self.matrix = matrix
message = self.decrypt()

return message

def dencrypt(self):
global matrix

matrix = [
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
]
index_str = 0
coef = 1
for row in range(len(self.matrix)):
for col in range(len(self.matrix[row])):
matrix[ligne][col] = getpixel((col*coef+x, ligne*coef+y), couleurs)
return matrix


def decrypt(self):
message = ""

for row in range(len(self.matrix)):
for col in range(len(self.matrix[row])):
message += chr(self.matrix[row][col])

return message
</code> je suis a la pour l'instant
Messages postés
31640
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
20 avril 2021
7 573 > telte
là tu n'as même pas commencé puisque la première étape devrait être ouvrir l'image.


voilà l'article que j'ai utilisé pour charger le tableau : https://www.pluralsight.com/guides/importing-image-data-into-numpy-arrays
enfin reussi
merci
Messages postés
31640
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
20 avril 2021
7 573
bien travaillé !