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


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

    在使用php编程的时候, 很多时候需要对上传的图片加水印,来确定图片版权和出处. 但是,一般情况下加水印的位置是图片的右下角, 但是,不同图片的色阶不同,有时候我们 图片的水印和图片本身色阶相同,就会造成水印不明显.

    下面这段代码可以实现自动识别图片的色阶,更加色阶差来添加图片的水印,这样可以避免水印和图片色阶一样的弊端.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    /*
    * 作者: 雪狐博客
    */
        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);
  • 相关阅读:
    【java多线程】队列系统之说说队列Queue
    【传输协议】什么是CA证书
    5.1 javassist基本使用
    第四章 dubbo内核之aop源码解析
    第三章 dubbo内核之ioc源码解析
    2.2 dubbo-spi源码解析
    2.1 jdk-spi的实现原理
    第一章 第一个dubbo项目
    第零章 dubbo源码解析目录
    macOS Sierra10.12.5 显示允许任何来源
  • 原文地址:https://www.cnblogs.com/fx2008/p/2974906.html
Copyright © 2020-2023  润新知