J'aimerai faire l'inverse de mon programme,je bloque passer de image a matrice

Résolu
telte -  
jee pee Messages postés 31966 Date d'inscription   Statut Modérateur Dernière intervention   -
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

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour, ne suffit-il pas d'inverser l'assignation en ligne 56?
    0
  2. telte
     
    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
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      je n'ai rien essayé.
      0
      1. telte > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        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
        0
      2. jee pee Messages postés 31966 Date d'inscription   Statut Modérateur Dernière intervention   10 010 > 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
        0
  3. telte
     
    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
    0
    1. jee pee Messages postés 31966 Date d'inscription   Statut Modérateur Dernière intervention   10 010
       
      pourquoi tergiverser ? tu connais une méthode tu y vas, programmer c'est essayer, rechercher, découvrir, échouer, recommencer
      0
      1. telte > jee pee Messages postés 31966 Date d'inscription   Statut Modérateur Dernière intervention  
         
        merci pour vos conseil
        0
      2. jee pee Messages postés 31966 Date d'inscription   Statut Modérateur Dernière intervention   10 010 > 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.
        0
      3. telte > jee pee Messages postés 31966 Date d'inscription   Statut Modérateur Dernière intervention  
         
        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
        0
  4. telte
     
    enfin reussi
    merci
    0
    1. jee pee Messages postés 31966 Date d'inscription   Statut Modérateur Dernière intervention   10 010
       
      bien travaillé !
      0