Aller au contenu

[PHP] Comparaison d'images et soustraction


Messages recommandés

Bonjour à tous et à toutes,

Encore une fois je cherche à utiliser des fonctions tordues :chinois: et que personne utilise... (c'st peut être les autres qui sont tordues ?) bon voila en faite je suis amener lors de la programmation d'un système (complex?) de filigrade à comparer 2 images afin de décoder le filigrade donc je voudrais en gros pouvoir retirer tout les pixels communs aux 2 images (Originel et avec filigrade) afin de faire apparaitre le filigrade sur l'image qui le contient (pour renseignement le filigrade est totalement invisibe à l'oeil nu meme avec une loupe !) donc j'ai pensé à un truc:

Analyser chaque pixel sur les 2 images (ayant la meme position) et vérifier si ils ont la même couleur au quel cas on le remplace par un pixel Blan et si c'est pas la meme couleur on ne fait rien. Et on passe au suivant etc... jusqu'à ce qu'on ai analyser tout les pixels...

Petite précision cette fonction est réservé à l'admin est utilisé en pour vérification donc pas grave si ça dépasse la limit d'éxécution.

Donc j'aimerais que cette méthode soit appliquable sur les 3 formats maitres de l'internet à savoir PNG, GIF et JPEG...

je me suis renseigné c'est baucoup plus simple en TIFF mais le problème c'est que les TIFF sont très très lourds ! le Tiff donne le couleur de chaque px et reproduit l'architecture donc en faite sur un TIFF il suffit d'une expression régulière et d'une boucle mais sur 50Mo ça va mettre un temps fou ! alors que la meme image en JPG pèsera que 5 à 2 Mo

MErci d'avance !

Lien vers le commentaire
Partager sur d’autres sites

De toute façon la faut que tes images soit décompressées pour pouvoir être comparées. J'ai peur qu'il te faille utiliser du TIF et du BMP.

En PHP tu n'aura jamais assez de mémoire et de temps proc pour calculer tout ça !

Sur dédié ou ton PC tu peut le programmer en C++ et appeler la fonction par la commende "system" genre tu fait :

cmp_img image1 image2.tif out.tif

Si tu est sur mutu j'ai peur que ce ne soit pas possible :francais: , demande toujours a ton hébergeur si il veut bien que tu utilise cette méthode mais ne compte pas trop dessus.

Lien vers le commentaire
Partager sur d’autres sites

En faite je voudrais utiliser ça en locale (deja mon hebergeur est pas content après moi que j'utilise trop de ressources :-D )

mais pour l'instant j'ai fais un script j'ai presque réussi mais mon url est trop longue :(

je pense avoir trouvé une solution je test et j'edit pour vous dire !

j'utilise odnc une double boucle comme ça:

while($y <= imagesy($source)){
$x = 0;
while($x <= imagesx($source)){

 if(imagecolorat($source,$x,$y) == imagecolorat($verif,$x,$y)){
 ImageSetPixel($result,$x,$y,$ok);
 }
 else{
 imagesetpixel($result,$x,$y,$non);
 }

$x = $x+1;
}
$y = $y+1;
}

Edit:

Voila comme je le disais ça marche parfaitement en local j'ai testé avec le logo de google ça met moin de 3 secondes à éfféctuer le teste et ça marche du tonnerre (avec 1 filigrade à 1%) il y a juste des ptits endroits où c'est pas super mais en 5% ou 10% ça devrait régler le problème donc merci !!!

J'espère que je pourrais vous retrouver sur ce service de protection de la propriété intellectuel et des droits d'auteurs qui protegera réelement vos oeuvre graphiques, et permetra une Veritable traçabilité !

Merci !

Lien vers le commentaire
Partager sur d’autres sites

Dsl pour le double poste mais bon c'est pas trop en rapport avec mon truc précédent et tout de même assez pour pas recréer un topic bon si ça vous plait pas faite une mopération Modos :)

Donc je rencontre un nouveau problème:

lorsque l'image est noire sur la partie en haut à gauche le filigrane est affacé (noir sur noir ça fait rien du tout) donc il faut que je pali à cette faille.... j'ai eu plusieurs idées:

soit j'arrive à déterminé si en dessous de mon texte il y a du noir et si oui trouver une couleur qu'il n'y a pas en dessous, répéter le filigrane de façon illimité jusqu'à remplir toute l'image, mettre le filigrane avec une couleur aléatoire (rand(0,255),rand(0,255),rand(0,255)) ou alors les 2 dernières solutions à la foi

mais pour pouvoir répéter le filigrane il faut que je puisse trouver la hateur et la largeur en Pixel de mon texte... chose que je ne trouve pas pourtant je crois que je suis deja tombé sur une fonction comme ça dans la doc PHP quelqu'un peu m'aider ?

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...