Vérifier que 2 images sont identiques
Hors ligneGlougloute Le 10/05/2008 à 11:10 Profil de Glougloute Configuration de Glougloute

I love VIC
Bonjour à tous,

J'aimerais savoir s'il était possible de savoir si 2 images étaient identiques en php.
Pour se faire, je me suis dit, si 2 images sont identiques, elles ont le même poids. Le problème, c'est qu'il arrive souvent que 2 fichiers aient le même poids mais avec un contenu différent.

Je cherche un autre moyen, mais mon savoir en php est assez limité.
Avez-vous une idée ?

Merci d'avance;
--
Je vous aiderai dans la mesure du possible ;)
Hors ligneAtex Le 10/05/2008 à 14:51 Profil de Atex Configuration de Atex

APVS
Salut,

Suis pas programmateur, mais il y a 20 ans, en GFA Basic, les images pouvaient être transformées en chaines de caractères, peut-être est-ce encore le cas? Et dans ce cas: Si Image1$=Image2$ alors elles sont identiques...

Sinon, compare les couleurs de chaque pixel...

En abrégé:


For L=1 to 1280

       For H=1 to 1024
    
            If color pixel image1(H,L) = color pixel image2 (H,L)
            Else image$="différente"
                H=1024
            Endif

       Next H

   If  image$="différente"
   L=1280
   Print "T'as trafiqué cette photo, TRUANT !!!"
   Endif

Next L
Hors ligneGlougloute Le 10/05/2008 à 14:55 Profil de Glougloute Configuration de Glougloute

I love VIC
J'ai oublié de dire que je voulais faire ça en PHP :)

Merci pour ta réponse !
--
Je vous aiderai dans la mesure du possible ;)
Hors ligneAtex Le 10/05/2008 à 15:17 Profil de Atex Configuration de Atex

APVS
Je vous laisse le soin de retranscrire en PHP car j'y connais quedal en PHP
Hors ligneAnthony Le 11/05/2008 à 00:21 Profil de Anthony Configuration de Anthony

Admin
Salut,

C'est possible mais extrêmement coûteux en temps processeur. Tu peux avec les fonctions imagesx() et imagesy() retourner la largeur et la hauteur de l'image (ou sinon avec getimagesize()). Ensuite une fois que tu as ça, tu fais une double boucle qui va regarder les valeurs de tous les pixels avec la fonction imagecolorat() et si il n'y a aucune différence alors les images sont identiques. Attention cependant, pour les images compressées, il peut y avoir des différences de teinte sans pour autant que les images soient différentes, mais ça n'est pas géré par le programme ;)
--

Hors ligneGlougloute Le 11/05/2008 à 12:25 Profil de Glougloute Configuration de Glougloute

I love VIC
Merci Antho pour ta réponse.

En fait, je vais expliquer pourquoi j'ai posé cette question.

Il existe aujourd'hui sur internet des sites qui proposent de faire des captures d'écran de sites web. Mais avant que l'image soit capturée, ils affichent une image du genre "Capture en cours".

Mon idée était la suite. Toutes les heures, mon script php s'exécute et regarde si la capture est "Capture en cours" ou si l'image est différente.
Si elle est différente, on la copie sur le server.

Pour voir si l'image est similaire, on peut peut être prendre que quelques pixels au hasard sur l'image non ?


Penses-tu que l'utilisation que je souhaite en avoir ça risque de prendre trop de ressources ?

Merci d'avance.
--
Je vous aiderai dans la mesure du possible ;)
Hors ligneAnthony Le 11/05/2008 à 20:31 Profil de Anthony Configuration de Anthony

Admin
Si c'est une image "capture en cours" je présume que c'est toujours la même ? dans ce cas tu regardes si le md5() des deux images est identique, ça ira beaucoup plus vite. un md5(file_get_contents('image1')) et un autre md5 avec l'image 2 (en cours) et hop.
--

Hors ligneAtex Le 11/05/2008 à 21:45 Profil de Atex Configuration de Atex

APVS
Y a vraiment pas moyen de transformer les 2 images en chaînes de caractères?
Hors ligneGlougloute Le 11/05/2008 à 23:28 Profil de Glougloute Configuration de Glougloute

I love VIC
Merci Antho.

En fait, md5(file_get_content()) permet de générer une chaine ! C'est top !


Encore une petite question : cette méthode est-elle consommatrice ?
--
Je vous aiderai dans la mesure du possible ;)
Hors ligneAnthony Le 12/05/2008 à 10:35 Profil de Anthony Configuration de Anthony

Admin
Oui, un md5() c'est assez gourmand, mais le sha1() l'est encore un peu plus, donc niveau rapidité je te conseille de laisser ça
--

Vous avez résolu votre problème avec VIC ? Faites-le savoir sur les réseaux sociaux !
Vulgarisation-informatique.com
Cours en informatique & tutoriels