Python3 : coder un message dans une image hâchurée

<< retour accueil

Décodez cette image:

enigme

Le but du jeu est de coder une image noir et blanc en image faite de hâchures.

On part de cette micro image qui est dessinée pixel par pixel sur votre logiciel de dessin préféré (j'ai choisi Paint.net, en ayant pris soin de désactiver l'anticrenelage dans l'outil pinceau)

image origniale ici: image native

image agrandie pour que vous ayez la réponse en bas de page



Voici le >> code python à télécharger


# créé par uncledens , http://uncledens.chez-alice.fr/

f = open(r"heures.svg", "w")
from math import sqrt
from PIL.Image import *
im = open("heure.png")
width, height = im.size
d=5
epaisseur=d/(2*sqrt(2))
xmax=width*d
ymax=height*d

print(im.getpixel((0,0)))
line="<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n"
line+="<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" width=\""+str(xmax)+"\" height=\""+str(ymax)+"\">\n"
ep=epaisseur/sqrt(2)
miep=ep/2
for x in range (width):
    for y in range(height):
        if im.getpixel((x,y))==(255, 255, 255):
            x1,y1,x2,y2=0,0,1,1
        else:
            x1,y1,x2,y2=0,1,1,0       
        line+="<line x1=\""+str((x+x1)*d-miep+x1*ep)+"\" y1=\""+str((y+y1)*d-miep+y1*ep)+"\" x2=\""+str((x+x2)*d-miep+x2*ep)+"\" y2=\""+str((y+y2)*d-miep+y2*ep)+"\" style=\"stroke:rgb(0,0,0);stroke-width:"+str(epaisseur)+"\" />\n"
im.close()               
line+='</svg>\n'
f.write(line)
f.close()

Attention, vous aurez peut etre à modifier la ligne
im.getpixel((x,y))==(255, 255, 255):
car selon la maniere dont votre logiciel a encodé l'image, il est possible que ce soit codé autrement qu'en RVB. (dans mon premier test, l'image etait "binaire" c'est a dire que la ligne etait codée ainsi:
im.getpixel((x,y))==1

c'est pourcela que j'ai ajouté la ligne print(im.getpixel((0,0))) qui imprime le premier pixel de l'image


Ce programme génére un fichier SVG (textuel) qui peut etre lu par les navigateurs recents, et/ou par des logiciels d'images vectorielles tels qu'Inkscape (logiciel libre) qui vous permettra notamment d'exporter l'image en jpg ou png (image bitmap)
>> Fichier SVG généré


Voici limage d'origine agrandie:

image agrandie