OVH Community, votre nouvel espace communautaire.

comparaison d'image


johnny57
07/01/2016, 16h06
Problème réglé, j'ai trouvé une classe qui fonctionne très bien.

johnny57
07/01/2016, 09h28
Oups, mal copié collé. j'appelle la fonction comme ça :

$diff = image_compare($image1,$image2,5,5,5,1,5)

Nowwhat
07/01/2016, 09h11
Bonjour,

Ton script PHP :
Les deux images :
Code:
$image1="http://www.buzionweb.com/29956-home_default/extract-gaine-210-360m3h-d125.jpg";
$image2="http://www.buzionweb.com/29955-home_default/caisson-recup-air-chaud-600m3h.jpg";
Puis tu appelle la fonction : image_compare()
Code:
image_compare($image1,$image2,5,5,5,1,5)
Note : intéressant, la fonction retourne quelque chose, mais t'as 'jete' le résultat.

Puis tu imprime le variable $diff - qui n'est pas initialisé à ce moment (dans ton script)
Code:
print_r($diff);
Le code que tu propose ne correspond déjà pas avec le résultat que t'as posté :
Code:
Array
(
    [PixelsByColors] => 0
    [PixelsOutOfSpec] => 0
    [PercentDifference] => 
)

johnny57
07/01/2016, 08h59
Bonjour et meilleurs voeux,

J'ai besoin de comparer deux images sur mon dédié qui est sous R3 d'ovh. J'ai trouvé un script qui fait ça en php :

Code PHP:
/**
* Image Comparing Function Copyright (C)2011-2014 Robert Lerner, All Rights Reserved
* Modified by Mark Manning (12/28/2015).

* $image1 STRING/RESOURCE Filepath and name to PNG or passed image resource handle
* $image2 STRING/RESOURCE Filepath and name to PNG or passed image resource handle
* $RTolerance INTEGER (0-/+255) Red Integer Color Deviation before channel flag thrown
* $GTolerance INTEGER (0-/+255) Green Integer Color Deviation before channel flag thrown
* $BTolerance INTEGER (0-/+255) Blue Integer Color Deviation before channel flag thrown
* $WarningTolerance INTEGER (0-100) Percentage of channel differences before warning returned
* $ErrorTolerance INTEGER (0-100) Percentage of channel difference before error returned

*/
function image_compare($image1$image2$RTolerance=0$GTolerance=0,
$BTolerance=0$WarningTolerance=1$ErrorTolerance=5)
{
if( 
is_resource($image1) ){ $im $image1; }
else if( 
is_string($image1) ){
$a basename$image1 );
$b explode"."$a );
if( 
preg_match("/gif/i"$b[1]) ){ imagecreatefromgif$image1 ); }
else if( 
preg_match("/png/i"$b[1]) ){ imagecreatefrompng$image1 ); }
else if( 
preg_match("/bmp/i"$b[1]) ){ imagecreatefromwbmp$image1 ); }
else if( 
preg_match("/jpg|jpeg/i"$b[1]) ){ imagecreatefromjpeg$image1 ); }
else if( 
preg_match("/xpm/i"$b[1]) ){ imagecreatefromxpm$image1 ); }
else if( 
preg_match("/xbm/i"$b[1]) ){ imagecreatefromxbm$image1 ); }
else if( 
preg_match("/gd/i"$b[1]) ){ imagecreatefromgd$image1 ); }
else { die( 
"Unknown file format" ); }
}
else { die( 
"Unknown image type" ); }

if( 
is_resource($image2) ){ $im $image2; }
else if( 
is_string($image2) ){
$a basename$image2 );
$b explode"."$a );
if( 
preg_match("/gif/i"$b[1]) ){ imagecreatefromgif$image2 ); }
else if( 
preg_match("/png/i"$b[1]) ){ imagecreatefrompng$image2 ); }
else if( 
preg_match("/bmp/i"$b[1]) ){ imagecreatefromwbmp$image2 ); }
else if( 
preg_match("/jpg|jpeg/i"$b[1]) ){ imagecreatefromjpeg$image2 ); }
else if( 
preg_match("/xpm/i"$b[1]) ){ imagecreatefromxpm$image2 ); }
else if( 
preg_match("/xbm/i"$b[1]) ){ imagecreatefromxbm$image2 ); }
else if( 
preg_match("/gd/i"$b[1]) ){ imagecreatefromgd$image2 ); }
else { die( 
"Unknown file format" ); }
}
else { die( 
"Unknown image type" ); }

$OutOfSpec 0;

if( 
imagesx($im) != imagesx($im2) ){ die("Width does not match."); }
if( 
imagesy($im) != imagesy($im2) ){ die("Height does not match."); }
//
// By columns
//
$w imagesx($im);
$h imagesy($im);

for( 
$x=0$x<=$w-1$x++ ){
for( 
$y=0$y<=$h-1$y++ ){
$rgb imagecolorat($im$x$y);
$r1 = ($rgb >> 16) & 0xFF;
$g1 = ($rgb >> 8) & 0xFF;
$b1 $rgb 0xFF;

$rgb imagecolorat($im2$x$y);
$r2 = ($rgb >> 16) & 0xFF;
$g2 = ($rgb >> 8) & 0xFF;
$b2 $rgb 0xFF;

if( !((
$r1 >= ($r2 $RTolerance)) && ($r1 <= ($r2 $RTolerance))) ){ $OutOfSpec++; }
if( !((
$g1 >= ($g2 $GTolerance)) && ($g1 <= ($g2 $GTolerance))) ){ $OutOfSpec++; }
if( !((
$b1 >= ($b2 $BTolerance)) && ($b1 <= ($b2 $BTolerance))) ){ $OutOfSpec++; }
}
}

$TotalPixelsWithColors = ($w $h) * 3;

$RET['PixelsByColors'] = $TotalPixelsWithColors;
$RET['PixelsOutOfSpec'] = $OutOfSpec;

if( (
$OutOfSpec != 0) && ($TotalPixelsWithColors != 0) ){
$PercentOut = ($OutOfSpec $TotalPixelsWithColors) * 100;
}

$RET['PercentDifference'] = $PercentOut;
//
// Difference triggers WARNINGTOLERANCE%
//
if( $PercentOut >= $WarningTolerance ){ $RET['WarningLevel'] = TRUE; }
//
// Difference triggers ERRORTOLERANCE%
//
if( $PercentOut >= $ErrorTolerance ){ $RET['ErrorLevel'] = TRUE; }

RETURN 
$RET;
}

$image1="http://www.buzionweb.com/29956-home_default/extract-gaine-210-360m3h-d125.jpg";
$image2="http://www.buzionweb.com/29955-home_default/caisson-recup-air-chaud-600m3h.jpg";

$diff image_compare($image1,$image2,5,5,5,1,5)

print_r($diff);
Ces deux images sont fondamentalement différente et pourtant je reçois en retour cette réponse :

Code:
Array
(
    [PixelsByColors] => 0
    [PixelsOutOfSpec] => 0
    [PercentDifference] => 
)
Que je compare exactement la même image en poussant le vice à comparer la même url ou que je compare deux images strictement différentes le résultat est le même.

Vu les commentaires sur le site où je l'ai trouvé le script devrait marcher. Une idée du pourquoi ça ne marche pas sur mon dédié ? Un truc qui manque dans la config du serveur ?

Merci d'avance pour votre aide.