龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

php 使用PHP根据图片色界在不同位置加水印

时间:2014-11-02 02:19来源:网络整理 作者:网络 点击:
分享到:
使用PHP根据图片色界在不同位置加水印 [代码片段(76行)]
function add_wm($nmw_water, $src_file, $output_file, $x, $y) {       
       if(file_exists($output_file))       
           return;       

       $w1 = MagickGetImageWidth($nmw_water);       
       $h1 = MagickGetImageHeight($nmw_water);       

       $nmw =NewMagickWand();       
       MagickReadImage($nmw, $src_file);       

       // 默认的加水印位置调整       
       $lt_w = 50;       
       $lt_h = 50;       

       if($x == 0){       
           $w = MagickGetImageWidth($nmw);       
           $h = MagickGetImageHeight($nmw);       

           $x = $w;       
           $y = $h;       
       }else{       
           // 根据具体情况调整       
           $lt_w = 30;       
           $lt_h = 40;       
       }       

       MagickCompositeImage($nmw, $nmw_water, MW_OverCompositeOp, $x - $w1 - $lt_w, $y - $h1 - $lt_h);       
       MagickWriteImage($nmw, $output_file);       

       DestroyMagickWand($nmw);               
   }       

   // 还是groovy的eachFileRecurse好用啊       
   function add_wm_recurse($nmw_water, $to_dir, $output_dir, $arr) {       
       $dp = dir($to_dir);       
       while($file=$dp->read()){       
           if($file != '.' && $file != '..'){       

               if(is_dir($to_dir . '/' . $file)){       
                   mkdir($output_dir . '/' . $file);       
                   add_wm_recurse($nmw_water, $to_dir . '/' . $file, $output_dir . '/' . $file, $arr);       
               }else{       
                   if(!array_key_exists($to_dir . '/' . $file, $arr)){       
                       continue;       

                   }       

                   $sub_arr = $arr[$to_dir . '/' . $file];       
                   if($sub_arr){       
                       $x = intval($sub_arr[0]);       
                       $y = intval($sub_arr[1]);       
                       add_wm($nmw_water, $to_dir . '/' . $file, $output_dir . '/' . $file, $x, $y);       
                   }       
               }       
           }       
       }       
       $dp->close();       
   }       

   $to_dir = './resized';       
   $output_dir = './output';       

   // 这个是我用java的ImageIO遍历图片像素获取的符合裤子颜色的区域的坐标array(posX, posY)       
   $arr = array(       
       array(50, 50)       
   );       

   $water = './water.png';       
   $nmw_water =NewMagickWand();       
   MagickReadImage($nmw_water, $water);       

   add_wm_recurse($nmw_water, $to_dir, $output_dir, $arr);       

   DestroyMagickWand($nmw_water);
//该片段来自于http://outofmemory.cn
精彩图集

赞助商链接