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

Résolu/Fermé
telte - Modifié le 17 avril 2021 à 13:28
jee pee Messages postés 36387 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 28 novembre 2022 - 19 avril 2021 à 09:41
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

yg_be Messages postés 20738 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 novembre 2022 1 268
17 avril 2021 à 13:50
bonjour, ne suffit-il pas d'inverser l'assignation en ligne 56?
0
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
yg_be Messages postés 20738 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 novembre 2022 1 268
17 avril 2021 à 14:02
je n'ai rien essayé.
0
telte > yg_be Messages postés 20738 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 novembre 2022
17 avril 2021 à 14:23
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
jee pee Messages postés 36387 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 28 novembre 2022 8 840 > telte
17 avril 2021 à 14:55
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
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
jee pee Messages postés 36387 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 28 novembre 2022 8 840
17 avril 2021 à 16:24
pourquoi tergiverser ? tu connais une méthode tu y vas, programmer c'est essayer, rechercher, découvrir, échouer, recommencer
0
telte > jee pee Messages postés 36387 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 28 novembre 2022
18 avril 2021 à 11:46
merci pour vos conseil
0
jee pee Messages postés 36387 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 28 novembre 2022 8 840 > telte
18 avril 2021 à 19:08
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
telte > jee pee Messages postés 36387 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 28 novembre 2022
Modifié le 18 avril 2021 à 19:48
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
jee pee Messages postés 36387 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 28 novembre 2022 8 840 > telte
Modifié le 18 avril 2021 à 20:42
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
0
enfin reussi
merci
0
jee pee Messages postés 36387 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 28 novembre 2022 8 840
19 avril 2021 à 09:41
bien travaillé !
0