头像

php给图片加水印的代码

2018-04-06 09:52:40 来源:PHP代码   浏览()   评论 ( 0 )   

在使用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);


标签: php
声明:转载请注明来源(PHP代码)并保留原文链接:https://www.phpdaima.com//wenzhang-36.html
广告不存在
评论0

后面还有条评论,点击查看>>

温馨提示:为规范评论内容,垃圾评论一律封号...