/** * Generate and get the difference hash of image. * * @param Image $image * * @param Editor $editor * * @return string */ public function hash($image, $editor) { $width = 9; $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 9x8 $imagick = $image->getCore(); // Build hash $hash = ''; for ($y = 0; $y < $height; $y++) { // Get the pixel value for the leftmost pixel. $rgba = $imagick->getImagePixelColor(0, $y)->getColor(); $left = floor(($rgba['r'] + $rgba['g'] + $rgba['b']) / 3); for ($x = 1; $x < $width; $x++) { // Get the pixel value for each pixel starting from position 1. $rgba = $imagick->getImagePixelColor($x, $y)->getColor(); $right = floor(($rgba['r'] + $rgba['g'] + $rgba['b']) / 3); // Each hash bit is set based on whether the left pixel is brighter than the right pixel. if ($left > $right) { $hash .= '1'; } else { $hash .= '0'; } // Prepare the next loop. $left = $right; } } $editor->free($image); return $hash; }