PHP根据图片色阶确定位置打水印

直接分享源码

  1. <?php    
  2.     function add_wm($nmw_water$src_file$output_file$x$y) {    
  3.         if(file_exists($output_file))    
  4.             return;    
  5.     
  6.         $w1 = MagickGetImageWidth($nmw_water);    
  7.         $h1 = MagickGetImageHeight($nmw_water);    
  8.     
  9.         $nmw =NewMagickWand();    
  10.         MagickReadImage($nmw$src_file);    
  11.     
  12.         // 默认的加水印位置调整    
  13.         $lt_w = 50;    
  14.         $lt_h = 50;    
  15.     
  16.         if($x == 0){    
  17.             $w = MagickGetImageWidth($nmw);    
  18.             $h = MagickGetImageHeight($nmw);    
  19.     
  20.             $x = $w;    
  21.             $y = $h;    
  22.         }else{    
  23.             // 根据具体情况调整    
  24.             $lt_w = 30;    
  25.             $lt_h = 40;    
  26.         }    
  27.     
  28.         MagickCompositeImage($nmw$nmw_water, MW_OverCompositeOp, $x - $w1 - $lt_w$y - $h1 - $lt_h);    
  29.         MagickWriteImage($nmw$output_file);    
  30.     
  31.         DestroyMagickWand($nmw);            
  32.     }    
  33.     
  34.     // 还是groovy的eachFileRecurse好用啊    
  35.     function add_wm_recurse($nmw_water$to_dir$output_dir$arr) {    
  36.         $dp = dir($to_dir);    
  37.         while($file=$dp->read()){    
  38.             if($file != '.' && $file != '..'){    
  39.                 if(is_dir($to_dir . '/' . $file)){    
  40.                     mkdir($output_dir . '/' . $file);    
  41.                     add_wm_recurse($nmw_water$to_dir . '/' . $file$output_dir . '/' . $file $arr);    
  42.                 }else{    
  43.                     if(!array_key_exists($to_dir . '/' . $file$arr)){    
  44.                         continue;    
  45.                     }    
  46.     
  47.                     $sub_arr = $arr[$to_dir . '/' . $file];    
  48.                     if($sub_arr){    
  49.                         $x = intval($sub_arr[0]);    
  50.                         $y = intval($sub_arr[1]);    
  51.                         add_wm($nmw_water$to_dir . '/' . $file$output_dir . '/' . $file$x$y);    
  52.                     }    
  53.                 }    
  54.             }    
  55.         }    
  56.         $dp->close();    
  57.     }    
  58.     
  59.     $to_dir = './resized';    
  60.     $output_dir = './output';    
  61.     
  62.     // 这个是我用java的ImageIO遍历图片像素获取的符合裤子颜色的区域的坐标array(posX, posY)    
  63.     $arr = array(    
  64.         array(50, 50)    
  65.     );    
  66.     
  67.     $water = './water.png';    
  68.     $nmw_water =NewMagickWand();    
  69.     MagickReadImage($nmw_water$water);    
  70.     
  71.     add_wm_recurse($nmw_water$to_dir$output_dir$arr);    
  72.     
  73.     DestroyMagickWand($nmw_water);    
  74. ?>