[PHP] PHP根据图片色界在不同位置加水印 防止水印遮挡图片主体部位 →→→→→进入此内容的聊天室

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

回复 "PHP根据图片色界在不同位置加水印 防止水印遮挡图片主体部位"

这儿你可以回复上面这条便签

captcha