Home  >  Article  >  php教程  >  PHP adds watermarks at different locations according to the color boundary of the image

PHP adds watermarks at different locations according to the color boundary of the image

大家讲道理
大家讲道理Original
2016-11-11 09:47:551390browse

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

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn