hash(
$f
);
}
return
$isString
?
$result
[0] :
$result
;
}
public
function
checkIsSimilarImg(
$imgHash
,
$otherImgHash
){
if
(
file_exists
(
$imgHash
) &&
file_exists
(
$otherImgHash
)){
$imgHash
=
$this
->run(
$imgHash
);
$otherImgHash
=
$this
->run(
$otherImgHash
);
}
if
(
strlen
(
$imgHash
) !==
strlen
(
$otherImgHash
))
return
false;
$count
= 0;
$len
=
strlen
(
$imgHash
);
for
(
$i
=0;
$i
<
$len
;
$i
++){
if
(
$imgHash
{
$i
} !==
$otherImgHash
{
$i
}){
$count
++;
}
}
return
$count
<= (5 *
$rate
*
$rate
) ? true : false;
}
public
function
hash(
$file
){
if
(!
file_exists
(
$file
)){
return
false;
}
$height
= 8 *
$this
->rate;
$width
= 8 *
$this
->rate;
$img
= imagecreatetruecolor(
$width
,
$height
);
list(
$w
,
$h
) =
getimagesize
(
$file
);
$source
=
$this
->createImg(
$file
);
imagecopyresampled(
$img
,
$source
, 0, 0, 0, 0,
$width
,
$height
,
$w
,
$h
);
$value
=
$this
->getHashValue(
$img
);
imagedestroy(
$img
);
return
$value
;
}
public
function
getHashValue(
$img
){
$width
= imagesx(
$img
);
$height
= imagesy(
$img
);
$total
= 0;
$array
=
array
();
for
(
$y
=0;
$y
<
$height
;
$y
++){
for
(
$x
=0;
$x
<
$width
;
$x
++){
$gray
= ( imagecolorat(
$img
,
$x
,
$y
) >> 8 ) & 0xFF;
if
(!
is_array
(
$array
[
$y
])){
$array
[
$y
] =
array
();
}
$array
[
$y
][
$x
] =
$gray
;
$total
+=
$gray
;
}
}
$average
=
intval
(
$total
/ (64 *
$this
->rate *
$this
->rate));
$result
=
''
;
for
(
$y
=0;
$y
<
$height
;
$y
++){
for
(
$x
=0;
$x
<
$width
;
$x
++){
if
(
$array
[
$y
][
$x
] >=
$average
){
$result
.=
'1'
;
}
else
{
$result
.=
'0'
;
}
}
}
return
$result
;
}
public
function
createImg(
$file
){
$ext
=
$this
->getFileExt(
$file
);
if
(
$ext
===
'jpeg'
)
$ext
=
'jpg'
;
$img
= null;
switch
(
$ext
){
case
'png'
:
$img
= imagecreatefrompng(
$file
);
break
;
case
'jpg'
:
$img
= imagecreatefromjpeg(
$file
);
break
;
case
'gif'
:
$img
= imagecreatefromgif(
$file
);
}
return
$img
;
}
public
function
getFileExt(
$file
){
$infos
=
explode
(
'.'
,
$file
);
$ext
=
strtolower
(
$infos
[
count
(
$infos
) - 1]);
return
$ext
;
}
}