Transformez vos photos en dessins (application gratuite online)


Tout le monde n'est pas capable de dessiner à partir d'un paysage, d'une fleur, ou à partir d'une photo...
Le petit logiciel proposé ici peut rendre service : il transforme une photo en dessin.
Plus précisément, il trace les contours des différentes formes constituant l'objet photographié.

        

>>>> Cliquez ici pour utiliser le logiciel online !

Comment ça marche ?

Un petit script php (sans utilisation de filtres) :
D'abord on convertit l'image en noir et blanc : imagecopymergegray fait cela très bien.
$taille=getimagesize("mon_image.jpg");
$larg=$taille[0];$haut=$taille[1];
$im = imagecreatefromjpeg("mon_image.jpg");
imagecopymergegray($im, $im, 0, 0, 0, 0, $larg,$haut, 0);

Ensuite on balaie l'image pixel par pixel, et on mesure l'écart de couleur par rapport aux pixels voisins (en horizontal et vertical).
for($y=0;$y<$haut;$y++)
    {
    for($x=0;$x<$larg;$x++)
        {
        $rgb = imagecolorat($im, $x, $y);
        $r[$x][$y] = ($rgb >> 16) & 0xFF;
        $ecart[$x][$y]=255-(abs($r[$x-1][$y]-$r[$x][$y])+abs($r[$x][$y-1]-$r[$x][$y]))/2;
        }
    }

Si l'écart est important, on se trouve sur une lignes de contour séparant une zone sombre d'une claire ou une couleur d'une autre.
Ne reste qu'à afficher en noir les contours sur une nouvelle image.
Ou plutôt en gris plus ou moins foncé selon l'ampleur de notre "écart" (ramené dans la plage 0-255).
$im = ImageCreate ($larg,$haut); //nouvelle image
$couleur_fond = ImageColorAllocate ($im, 200, 200, 200);
imagecolortransparent($im,$couleur_fond); //fond de l'image transparent
//créer une palette de gris
for($numgris=0;$numgris<255;$numgris=$numgris+2)imagecolorallocate($im,$numgris,$numgris,$numgris);
// tracer les traits gris sur l'image transparente
for($y=0;$y<$haut;$y++)
    {
    for($x=0;$x<$larg;$x++)
        {
        if(isset($ecart[$x][$y]))
            {
            $gris = imagecolorclosest($im,$ecart[$x][$y],$ecart[$x][$y],$ecart[$x][$y]);
            imagesetpixel ($im,$x,$y,$gris);
            }
        }
    }
// on enregistre l'image dans zaza.gif
ImageGif ($im,"zaza.gif");
imageDestroy($im);


Le principe est là, tout le reste n'est que perfectionnements (pour consommer moins de mémoire, pour paramètrer le contraste ou le niveau de détails, pour produire un dessin en couleur plutot qu'en gris...).

Cliquez ici pour utiliser le logiciel online !