public function hash($image, $editor)
{
// Resize the image.
$width = 8;
$height = 8;
$image = clone $image;
// Make sure we are working on the clone if Image is passed
$editor->resizeExact($image, $width, $height);
// Resize to exactly 8x8
$gd = $image->getCore();
// Create an array of greyscale pixel values.
$pixels = array();
for ($y = 0; $y < $height; $y++) {
for ($x = 0; $x < $width; $x++) {
$rgba = imagecolorat($gd, $x, $y);
$r = $rgba >> 16 & 0xff;
$g = $rgba >> 8 & 0xff;
$b = $rgba & 0xff;
$pixels[] = floor(($r + $g + $b) / 3);
// Gray
}
}
// Get the average pixel value.
$average = floor(array_sum($pixels) / count($pixels));
// Each hash bit is set based on whether the current pixels value is above or below the average.
$hash = '';
foreach ($pixels as $pixel) {
if ($pixel > $average) {
$hash .= '1';
} else {
$hash .= '0';
}
}
return $hash;
}