php给图片加水印的代码

清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>

在使用php编程的时候, 很多时候需要对上传的图片加水印,来确定图片版权和出处. 但是,一般情况下加水印的位置是图片的右下角,但是,不同图片的色阶不同,有时候我们图片的水印和图片本身色阶相同,就会造成水印不明显.下面这段代码可 以实现自动识别图片的色阶,更加色阶差来添加图片的水印,这样可以避免水印和图片色阶一样的弊端.

*/
    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);