Advertisement
Guest User

code

a guest
Nov 19th, 2012
421
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.14 KB | None | 0 0
  1.  
  2. <?php
  3.  
  4.     // ini_set('memory_limit', '256M');
  5.    
  6.     class imagediff
  7.     {
  8.         private $image1;
  9.         private $image2;
  10.        
  11.         function  __construct($img1, $img2)
  12.         {
  13.             $this->image1['path'] = realpath($img1);
  14.             $this->image2['path'] = realpath($img2);
  15.             if($this->image1['path'] === false || $this->image2['path'] === false)
  16.             {
  17.                 throw new Exception('Image "'.htmlspecialchars( $this->image1 ? $img2 : $img1 ).'" not found!');
  18.             }
  19.             else
  20.             {
  21.                 $this->image1['type'] = $this->imagetyte($this->image1['path']);
  22.                 $this->image2['type'] = $this->imagetyte($this->image2['path']);
  23.             }
  24.         }
  25.  
  26.         private function imagetyte($imgname)
  27.         {
  28.             $file_info = pathinfo($imgname);
  29.             if(!empty ($file_info['extension']))
  30.             {
  31.                 $filetype = strtolower($file_info['extension']);
  32.                 $filetype = $filetype == 'jpg' ? 'jpeg' : $filetype;
  33.                 $func = 'imagecreatefrom' . $filetype;
  34.                 if(function_exists($func))
  35.                 {
  36.                     return $filetype;
  37.                 }
  38.                 else
  39.                 {
  40.                     throw new Exception('File type "'.htmlspecialchars( $filetype ).'" not supported!');
  41.                 }
  42.             }
  43.             else
  44.             {
  45.                 throw new Exception('File type not supported!');
  46.             }
  47.         }
  48.  
  49.         private function imagehex($image)
  50.         {
  51.             $size = getimagesize($image['path']);
  52.             $func = 'imagecreatefrom'.$image['type'];
  53.             $imageres = $func($image['path']);
  54.             $zone = imagecreate(20, 20);
  55.             imagecopyresized($zone, $imageres, 0, 0, 0, 0, 20, 20, $size[0], $size[1]);
  56.             $colormap = array();
  57.             $average = 0;
  58.             $result = array();
  59.             for($x=0; $x<20; $x++)
  60.             {
  61.                 for($y=0; $y<20; $y++)
  62.                 {
  63.                     $color = imagecolorat($zone, $x, $y);
  64.          
  65.                     $color = imagecolorsforindex($zone, $color);
  66.      
  67.                     $colormap[$x][$y]= 0.212671 * $color['red'] + 0.715160 * $color['green'] + 0.072169 * $color['blue'];
  68.                     $average += $colormap[$x][$y];
  69.                 }
  70.             }
  71.             $average /= 400;
  72.             for($x=0; $x<20; $x++)
  73.             {
  74.                 for($y=0; $y<20; $y++)
  75.                 {
  76.                     $result[]=($x<10?$x:chr($x+97)) . ($y<10?$y:chr($y+97)) . round(2*$colormap[$x][$y]/$average);
  77.                 }
  78.             }
  79.             return $result;
  80.         }
  81.  
  82.         public function diff()
  83.         {
  84.             $hex1 = $this->imagehex($this->image1) ;
  85.             $hex2 = $this->imagehex($this->image2);
  86.             $result=(count($hex1) + count($hex2)) - count(array_diff($hex2,$hex1))-400;
  87.         return $result / ( ( count($hex1) + count($hex2) ) / 2 );
  88.         }
  89.     }
  90.  
  91.     $diff = new imagediff('holly-marie-combs-09.jpg', '3.jpg');
  92.     print ($diff->diff() * 100 ).'%';
  93.  
  94. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement