美文网首页
开发企业网站11 -- 图片加水印

开发企业网站11 -- 图片加水印

作者: 潘肚饿兵哥哥 | 来源:发表于2019-12-22 17:45 被阅读0次

    \color{rgba(254, 67, 101, .8)}{文字水印:}

    <?php
        /*
            给图片加水印
            1.添加文字水印
                (1) 要把字体文件复制到放图片的这个文件夹里,例如这里用simhei.ttf字体
            2.添加图片水印
        */
    
        $filename = '1.jpeg';
        //水印文字
        $text = '这是一个水印';
        
    ////////////////////////
    //先拿到图片
    ///////////////////////
    
        //  imagecreatefromstring(); 返回一个图像标识符,其表达了从给定字符串得来的图像。图像格式将自动检测,只要 PHP 支持:JPEG,PNG,GIF,WBMP 和 GD2。就是自动检测图像类型(后缀)
        //    file_get_contents() 把整个文件读入一个字符串中。就是把一个文件打开,变成字符串
        $image = imagecreatefromstring(file_get_contents($filename));
    
    //水印颜色
    $color = imagecolorallocate($image, 255, 0, 0);
    
    //水印开始坐标
    $x = 0;
    $y = 30;
    
    ////////////////////////
    //然后写字
    ///////////////////////
    imagettftext($image, 30, $x, $y, $color, 'simhei.ttf', $text);
    
    
    
    
    ////////////////////////
    //最后生成图片
    ///////////////////////
    
        //拿到图片后缀
        //strtolower();将后缀全部转为小写,拿到的后缀有可能是大写的,先全部转成大写或小写都可以
        $suffix = strtolower(strrchr($filename, '.'));
    
    
        switch($suffix){
            case '.jpg':
            case '.jpeg': 
            //把这两种格式统一写成一种,本身这两个后缀都是同一个格式
            //所以case后面的内容都是一样的,所以第一个case后面不用写
                $func = 'imagejpeg';break;
            case '.gif';
                $func = 'imagegif';break;
            case '.png';
                $func = 'imagepng';break;
        }
    
    
        //拿到文件目录,就是存放原图的路径,然后给新图重新命名并添加路径
        //dirname: 取一个文件的目录部分
        //basename :取一个文件的文件部分,可以是去掉目录,也可以是去掉后缀
        //因为原图和修改后的图在同一个文件夹,所以给每一个修改后的图加上一个w_
        $path = dirname($filename);
        $water = $path.'/w_'.basename($filename);
    
    
        // 生成目标图片并保存
        //imagejpeg($dst_image, 'thumb2.jpg');如果没有上面的switch,就要这样写
        //判定后,用另一种写法
        //用$thumb将图片名也换掉,并加上路径
        $func($image, $water);
        
        
        
        //销毁资源:
        imagedestroy($image);
    ?>
    

    \color{rgba(254, 67, 101, .8)}{==================================================}

    \color{rgba(254, 67, 101, .8)}{图片水印:}

    <?php
    //图片缩略:先创建一个小的画布尺寸,然后把要缩的图片按坐标放到这个画布上,最后再把这个画布存起来,就完成缩略图了
    //用GD库中的 imagecopyresampled(); 函数
    // 这有一个问题,如果画布尺寸和原图尺寸比例不一样,缩小后就会变形(拉伸)
    
    $filename = 'public/uploads/images/20191020/1.jpg';
    
    //getimagesize()函数用于获取图像大小及相关信息,成功返回一个数组,失败则返回FALSE并产生一条E_WARNING级的错误信息。
    //把获取到的数组中的值赋给list函数中的变量
    list($src_w, $src_h) = getimmagesize($filename);
    
    
    $per = 0.5;//设置缩放比例:缩小一半
    
    //目标尺寸:如果不在前面设置缩放比例,也可以在这里直接写固定尺寸
    //$dst_w = 200;  $dst_h = 300; 但是这样写会变形,要想他不变形,就要算好原图的比例,这里用等比例缩放的方式,计算原图宽高比例然后缩放的方式在2.php
    $dst_w = $src_w*$per;
    $dst_h = $src_h*$per;
    
    
    // imagecreatefromstring(); 返回一个图像标识符,其表达了从给定字符串得来的图像。图像格式将自动检测,只要 PHP 支持:JPEG,PNG,GIF,WBMP 和 GD2。就是自动检测图像类型(后缀)
    //file_get_contents() 把整个文件读入一个字符串中。就是把一个文件打开,变成字符串
    $src_image = imagecreatefromstring(file_get_contents($filename));
    
    //imagecreatetruecolor — 新建一个真彩色图像,返回一个图像标识符,代表一幅幅大小为  x_size 和  y_size 的黑色图像。
    $dst_image = imagecreatetruecolor($dst_w, $dst_h);
    
    //从目标的0,0点坐标开始平铺
    $dst_x = 0;
    $dst_y = 0;
    
    
    /*
        imagecopyresampled — 重采样拷贝部分图像并调整大小
    
        imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )
    
        dst_image
        目标图象连接资源。
    
        src_image
        源图象连接资源。
    
        dst_x
        目标(画布的坐标) X 坐标点。
    
        dst_y
        目标(画布的坐标) Y 坐标点。
    
        src_x
        源(从原图片的那个位置开始截)的 X 坐标点。
    
        src_y
        源(从原图片的那个位置开始截)的 Y 坐标点。
    
        dst_w
        目标宽度。
    
        dst_h
        目标高度。
    
        src_w
        源图象的宽度。
    
        src_h
        源图象的高度。
    */
    imagecopyresampled($dst_image, $src_image, $dst_x, $dst_y, 0, 0, $dst_w, $dst_h, $src_w, $src_h);
    
    // 生成目标图片并保存
    imagejpeg($dst_image, 'thumb.jpg');
    
    //销毁资源:两个资源,原图像和生成的图像
    imagedestroy($src_image);
    imagedestroy($dst_image);
    
    ?>
    

    \color{rgba(254, 67, 101, .8)}{把图片水印封装成一个函数:}

    <?php
        /*
            给图片加水印
            1.添加文字水印
            2.添加图片水印
        */
    
        $filename = '1.jpeg';
        //水印图片
        $water_filename = 'water.jpg';
    
        //这是透明度(用于水印的透明度)
        //透明度有些图可能改不了,这跟用的图有关
        //$pct = 80;
        //$position = 1;
    
        //接收函数返回值
        $ret = water_img($filename, $water_filename, 5, 80);
        //然后将它输出给图片,加了水印的图片就会在浏览器中显示
        echo "<img src='$ret'/>";
    
        //封装函数: 4个参数
        function water_img($filename, $water_filename, $position=9, $pct=100){
            ////////////////////////
        //先拿到图片
        ///////////////////////
    
            //  imagecreatefromstring(); 返回一个图像标识符,其表达了从给定字符串得来的图像。图像格式将自动检测,只要 PHP 支持:JPEG,PNG,GIF,WBMP 和 GD2。就是自动检测图像类型(后缀)
            //    file_get_contents() 把整个文件读入一个字符串中。就是把一个文件打开,变成字符串
            //把目标图和原图打开
            $dst_im = imagecreatefromstring(file_get_contents($filename));
    
            $src_im = imagecreatefromstring(file_get_contents($water_filename));
    
    
            //打开一个资源,获取宽度、高度
            $src_w = imagesx($src_im);
            $src_h = imagesx($src_im);
            
    
            //如果先把原图分成9块,再确决定把水印加在哪一个部分
            //先拿到目标图的大小
            //然后根据原图和水印图的尺寸确定位置
            //最后,如果没有给1-9中的任意一个位置的话,给一个默认值default:从0,0位置开始
            
            //getimagesize()函数用于获取图像大小及相关信息,成功返回一个数组,失败则返回FALSE并产生一条E_WARNING级的错误信息。
            //把获取到的数组中的值赋给list函数中的变量
            list($dst_w, $dst_h) = getimmagesize($filename);
    
            switch($position){
                case 1://左上角
                    //水印图在目标图上的位置
                    $dst_x = 0;
                    $dst_y = 0;
                break;
                case 2://上居中
                    //水印图在目标图上的位置
                    $dst_x = ($dst_w-$src_w)/2;
                    $dst_y = 0;
                break;
                case 3://右上角
                    //水印图在目标图上的位置
                    $dst_x = $dst_w-$src_w;
                    $dst_y = 0;
                break;
                case 4://左居中
                    //水印图在目标图上的位置
                    $dst_x = 0;
                    $dst_y = ($dst_h-$src_h)/2;
                break;
                case 5://居中
                    //水印图在目标图上的位置
                    $dst_x = ($dst_w-$src_w)/2;
                    $dst_y = ($dst_h-$src_h)/2;
                break;
                case 6://右居中
                    //水印图在目标图上的位置
                    $dst_x = $dst_w-$src_w;
                    $dst_y = ($dst_h-$src_h)/2;
                break;
                case 7://左下角
                    //水印图在目标图上的位置
                    $dst_x = 0;
                    $dst_y = $dst_h-$src_h;
                break;
                case 8://下居中
                    //水印图在目标图上的位置
                    $dst_x = ($dst_w-$src_w)/2;
                    $dst_y = $dst_h-$src_h;
                break;
                case 9://右下角
                    //水印图在目标图上的位置
                    $dst_x = $dst_w-$src_w;
                    $dst_y = $dst_h-$src_h;
                break;
                default:
                    $dst_x = 0;
                    $dst_y = 0;
            }
            
    
    
    
            //把水印图叠加到原图上,这里0,0是从哪个位置开始截取图像做水印图,一般从00开始
            //后面的$src_w, $src_h
            imagecopymerge($dst_im, $src_im, $dst_x, $dst_y, 0, 0,  $src_w, $src_h, $pct);
    
    
        ////////////////////////
        //最后生成图片
        ///////////////////////
    
            //拿到图片后缀
            //strtolower();将后缀全部转为小写,拿到的后缀有可能是大写的,先全部转成大写或小写都可以
            $suffix = strtolower(strrchr($filename, '.'));
    
    
            switch($suffix){
                case '.jpg':
                case '.jpeg': 
                    $func = 'imagejpeg';break;//把这两种格式统一写成一种,本身这两个后缀都是同一个格式,所以case后面的内容都是一样的,所以第一个case后面不用写
                case '.gif';
                    $func = 'imagegif';break;
                case '.png';
                    $func = 'imagepng';break;
            }
    
    
            //拿到文件目录,就是存放原图的路径,然后给新图重新命名并添加路径
            //dirname: 取一个文件的目录部分
            //basename :取一个文件的文件部分,可以是去掉目录,也可以是去掉后缀
            //因为原图和修改后的图在同一个文件夹,所以给每一个修改后的图加上一个w_
            $path = dirname($filename);
            $water = $path.'/w_'.basename($filename);
    
    
            // 生成目标图片并保存
            //imagejpeg($dst_image, 'thumb2.jpg');如果没有上面的switch,就要这样写
            //判定后,用另一种写法
            //用$thumb将图片名也换掉,并加上路径
            $func($dst_im, $water);
            
            
            
            //销毁资源:
            imagedestroy($dst_im);
            imagedestroy($src_im);
        }
        return $water;
    
    ?>
    

    \color{rgba(254, 67, 101, .8)}{==============================}

    \color{rgba(254, 67, 101, .8)}{文字水印函数:}

    <?php
     
        // $filename = '1.jpeg';
        // $text = '这是一个文字水印';
        // $image = imagecreatefromstring(file_get_contents($filename));
    
        // $color = imagecolorallocate($image, 255, 0, 0);
    
        // $x = 0;
        // $y = 30;
        // imagettftext($image, 30, $x, $y, $color, 'simhei.ttf', $text);
        // $suffix = strtolower(strrchr($filename, '.'));
        // switch($suffix){
        //     case '.jpg':
        //     case '.jpeg': 
        //         $func = 'imagejpeg';break;
        //     case '.gif';
        //         $func = 'imagegif';break;
        //     case '.png';
        //         $func = 'imagepng';break;
        // }
        // $path = dirname($filename);
        // $water = $path.'/w_'.basename($filename);
        // $func($image, $water);
        // imagedestroy($image);
    
        // 将以上代码封装成给图片添加文字水印
    
    
    
    
    
        /*
        给图片加水印
        1.添加文字水印
            (1) 要把字体文件复制到放图片的这个文件夹里,例如这里用simhei.ttf字体
        2.添加图片水印
        */
    
    $filename = '1.jpeg';
    //水印文字
    $text = '这是一个文字水印';
    
    $water = water_text($filename, $text);
    //echo "<img src='$water' />";可以在这里输出值查看效果
    
    //angle是水印角度
    function water_text($filename, $text, $color='#FF0000', $size=30, $angle=0){
        ////////////////////////
        //先拿到图片
        ///////////////////////
    
        //  imagecreatefromstring(); 返回一个图像标识符,其表达了从给定字符串得来的图像。图像格式将自动检测,只要 PHP 支持:JPEG,PNG,GIF,WBMP 和 GD2。就是自动检测图像类型(后缀)
        //    file_get_contents() 把整个文件读入一个字符串中。就是把一个文件打开,变成字符串
        $image = imagecreatefromstring(file_get_contents($filename));
    
        //对颜色的色码格式进行判定,要把16进制的色码转成10进制
        //substr() 函数返回字符串的一部分.这里从第0位取值,只取一位
        //判断有没有#号,如果没有#号,那么代表用户填错格式了,就给一个默认值黑色
        //如果有#号,继续判断颜色值的长度是不是3位或者6位
        //不是就是错的,给默认值黑色
        //如果是3位或者6位
        
        //判断1:是否有#号
        if(substr($color, 0, 1) == '#'){
            //水印颜色
            $color = substr($color, 1);
            //判断2:是否是3位或6位
            if(strlen($color)==3 || strlen($color)==6){
                //判断3:3位或6位分开处理
                if(strlen($color) == 3){
                    //str_split 将一个字符串转为数组,并以每一个为单位分割
                    $color_arr = str_split($color, 1);
                }else{
                    //str_split 将一个字符串转为数组,并以每两个为单位分割
                    $color_arr = str_split($color, 2);
                }
                //分割完了之后,把3位的色码变成6位
                //如果$color_arr长度是1,就不用补全
                //如果长度是2,就要补全成为6位,长度是1就不用管了
                foreach($clolr_arr as $k=>$v){
                    if(strlen($v)==1){
                        $color_arr[$k] = $v.$v;
                    }
                }
    
                //hexdec 将16进制转成10进制
                $red = hexdec($color_arr[0]);
                $green = hexdec($color_arr[1]);
                $blue = hexdec($color_arr[2]);
    
                $color = imagecolorallocate($image, $red, $green, $blue);
            }else{
                $color = imagecolorallocate($image, 0, 0, 0);
            }
        }else{
            //水印颜色
            $color = imagecolorallocate($image, 0, 0, 0);
        }
    
        
    
        //水印开始坐标
        $x = 0;
        $y = 30;
    
        ////////////////////////
        //然后写字
        ///////////////////////
        imagettftext($image, $size, $angle, $x, $y, $color, 'simhei.ttf', $text);
    
        ////////////////////////
        //最后生成图片
        ///////////////////////
    
        //拿到图片后缀
        //strtolower();将后缀全部转为小写,拿到的后缀有可能是大写的,先全部转成大写或小写都可以
        $suffix = strtolower(strrchr($filename, '.'));
    
        switch($suffix){
            case '.jpg':
            case '.jpeg': 
            //把这两种格式统一写成一种,本身这两个后缀都是同一个格式
            //所以case后面的内容都是一样的,所以第一个case后面不用写
                $func = 'imagejpeg';break;
            case '.gif';
                $func = 'imagegif';break;
            case '.png';
                $func = 'imagepng';break;
        }
    
    
        //拿到文件目录,就是存放原图的路径,然后给新图重新命名并添加路径
        //dirname: 取一个文件的目录部分
        //basename :取一个文件的文件部分,可以是去掉目录,也可以是去掉后缀
        //因为原图和修改后的图在同一个文件夹,所以给每一个修改后的图加上一个w_
        $path = dirname($filename);
        $water = $path.'/w_'.basename($filename);
    
    
        // 生成目标图片并保存
        //imagejpeg($dst_image, 'thumb2.jpg');如果没有上面的switch,就要这样写
        //判定后,用另一种写法
        //用$thumb将图片名也换掉,并加上路径
        $func($image, $water);
    
    
        //销毁资源:
        imagedestroy($image);
        return $water;
        }
    
    
    ?>
    

    \color{rgba(254, 67, 101, .8)}{给图片加文字水印函数优化:}

    
        /*
        给图片加水印
        1.添加文字水印
            (1) 要把字体文件复制到放图片的这个文件夹里,例如这里用simhei.ttf字体
        2.添加图片水印
        */
    
    $filename = '1.jpeg';
    //水印文字
    $text = '这是一个文字水印';
    
    //最后一个参数是九宫格的位置
    $water = water_text($filename, $text, '#990081', 2);
    //echo "<img src='$water' />";可以在这里输出值查看效果
    
    //angle是水印角度
    //$position是是水印加在哪里(九宫格)
    function water_text($filename, $text, $color='#FF0000', $position, $size=30, $angle=0){
        ////////////////////////
        //先拿到图片
        ///////////////////////
    
        //  imagecreatefromstring(); 返回一个图像标识符,其表达了从给定字符串得来的图像。图像格式将自动检测,只要 PHP 支持:JPEG,PNG,GIF,WBMP 和 GD2。就是自动检测图像类型(后缀)
        //    file_get_contents() 把整个文件读入一个字符串中。就是把一个文件打开,变成字符串
        $image = imagecreatefromstring(file_get_contents($filename));
    
        //首先让三个色默认为0,不是0再在下面做判断
        //如果不写=0,那么下面进行判断的时候,就会写一堆默认值为(0, 0, 0)的情况
        //这就相当于首先默认是黑色,三个0就是黑色
        $red=$green=$blue=0;
    
    
        //对颜色的色码格式进行判定,要把16进制的色码转成10进制
        //substr() 函数返回字符串的一部分.这里从第0位取值,只取一位
        //判断有没有#号,如果没有#号,那么代表用户填错格式了,就给一个默认值黑色
        //如果有#号,继续判断颜色值的长度是不是3位或者6位
        //不是就是错的,给默认值黑色
        //如果是3位或者6位
        
        //判断1:是否有#号
        if(substr($color, 0, 1) == '#'){
            //水印颜色
            $color = substr($color, 1);
            //判断2:是否是3位或6位
            if(strlen($color)==3 || strlen($color)==6){
                //判断3:3位或6位分开处理
                if(strlen($color) == 3){
                    //str_split 将一个字符串转为数组,并以每一个为单位分割
                    $color_arr = str_split($color, 1);
                }else{
                    //str_split 将一个字符串转为数组,并以每两个为单位分割
                    $color_arr = str_split($color, 2);
                }
                //分割完了之后,把3位的色码变成6位
                //如果$color_arr长度是1,就不用补全
                //如果长度是2,就要补全成为6位,长度是1就不用管了
                foreach($clolr_arr as $k=>$v){
                    if(strlen($v)==1){
                        $color_arr[$k] = $v.$v;
                    }
                }
    
                //hexdec 将16进制转成10进制
                $red = hexdec($color_arr[0]);
                $green = hexdec($color_arr[1]);
                $blue = hexdec($color_arr[2]);
            }
        }
    
        //imagecolorallocate — 为一幅图像分配颜色
        $color = imagecolorallocate($image, $red, $green, $blue);
    
        //加水印的位置:
        //目标图的宽高已知
        list($dst_w, $dst_h) = getimagesize($filename);
        //水印的宽高计算:
        //mb_strlen 计算字符长度
        //高为0时,用$src_h代替,高为0时,自动加5,宽自动加10,这个数是估计来的,不是固定的。
        //否则水印显示到图片外面去了
        $src_w = ($size+10)*mb_strlen($text, 'utf-8');
        $src_h = $size+5;
    
        //水印坐标(九宫格)
        
        switch($position){
            case 1://左上角
                //水印图在目标图上的位置
                $dst_x = 0;
                $dst_y = $size;
            break;
            case 2://上居中
                //水印图在目标图上的位置
                $dst_x = ($dst_w-$src_w)/2;
                $dst_y = $src_h;
            break;
            case 3://右上角
                //水印图在目标图上的位置
                $dst_x = $dst_w-$src_w;
                $dst_y = $src_h;
            break;
            case 4://左居中
                //水印图在目标图上的位置
                $dst_x = $src_h;
                $dst_y = ($dst_h-$src_h)/2;
            break;
            case 5://居中
                //水印图在目标图上的位置
                $dst_x = ($dst_w-$src_w)/2;
                $dst_y = ($dst_h-$src_h)/2;
            break;
            case 6://右居中
                //水印图在目标图上的位置
                $dst_x = $dst_w-$src_w;
                $dst_y = ($dst_h-$src_h)/2;
            break;
            case 7://左下角
                //水印图在目标图上的位置
                $dst_x = 0;
                $dst_y = $dst_h-$src_h;
            break;
            case 8://下居中
                //水印图在目标图上的位置
                $dst_x = ($dst_w-$src_w)/2;
                $dst_y = $dst_h-$src_h;
            break;
            case 9://右下角
                //水印图在目标图上的位置
                $dst_x = $dst_w-$src_w;
                $dst_y = $dst_h-$src_h;
            break;
            default:
                $dst_x = 0;
                $dst_y = $src_h;
        }
    
        ////////////////////////
        //然后写字
        ///////////////////////
        imagettftext($image, $size, $angle, $dst_x, $dst_y, $color, 'simhei.ttf', $text);
    
        ////////////////////////
        //最后生成图片
        ///////////////////////
    
        //拿到图片后缀
        //strtolower();将后缀全部转为小写,拿到的后缀有可能是大写的,先全部转成大写或小写都可以
        $suffix = strtolower(strrchr($filename, '.'));
    
        switch($suffix){
            case '.jpg':
            case '.jpeg': 
            //把这两种格式统一写成一种,本身这两个后缀都是同一个格式
            //所以case后面的内容都是一样的,所以第一个case后面不用写
                $func = 'imagejpeg';break;
            case '.gif';
                $func = 'imagegif';break;
            case '.png';
                $func = 'imagepng';break;
        }
    
    
        //拿到文件目录,就是存放原图的路径,然后给新图重新命名并添加路径
        //dirname: 取一个文件的目录部分
        //basename :取一个文件的文件部分,可以是去掉目录,也可以是去掉后缀
        //因为原图和修改后的图在同一个文件夹,所以给每一个修改后的图加上一个w_
        $path = dirname($filename);
        $water = $path.'/w_'.basename($filename);
    
    
        // 生成目标图片并保存
        //imagejpeg($dst_image, 'thumb2.jpg');如果没有上面的switch,就要这样写
        //判定后,用另一种写法
        //用$thumb将图片名也换掉,并加上路径
        $func($image, $water);
    
    
        //销毁资源:
        imagedestroy($image);
        return $water;
        }
    
    

    \color{rgba(254, 67, 101, .8)}{=======================================}

    \color{rgba(254, 67, 101, .8)}{给图片加文字水印copy来的的写法}
    \color{rgba(254, 67, 101, .8)}{1.PHP十六进制颜色转RGB颜色值}

    /**
         * 十六进制转RGB
         * 
         * @param string $color 16进制颜色值
         * @return array
         */
        public static function hex2rgb($color) {
            $hexColor = str_replace('#', '', $color);
            $lens = strlen($hexColor);
            if ($lens != 3 && $lens != 6) {
                return false;
            }
            $newcolor = '';
            if ($lens == 3) {
                for ($i = 0; $i < $lens; $i++) {
                    $newcolor .= $hexColor[$i] . $hexColor[$i];
                }
            } else {
                $newcolor = $hexColor;
            }
            $hex = str_split($newcolor, 2);
            $rgb = [];
            foreach ($hex as $key => $vls) {
                $rgb[] = hexdec($vls);
            }
            return $rgb;
        }
    
    ————————————————
    版权声明:本文为CSDN博主「helcyon」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/helcyon/article/details/80855153
    

    \color{rgba(254, 67, 101, .8)}{=======================================}

    \color{rgba(254, 67, 101, .8)}{2.PHP RGB颜色和十六进制颜色互转}

    /**
         * RGB转 十六进制
         * @param $rgb RGB颜色的字符串 如:rgb(255,255,255);
         * @return string 十六进制颜色值 如:#FFFFFF
         */
        function RGBToHex($rgb){
            $regexp = "/^rgb\(([0-9]{0,3})\,\s*([0-9]{0,3})\,\s*([0-9]{0,3})\)/";
            $re = preg_match($regexp, $rgb, $match);
            $re = array_shift($match);
            $hexColor = "#";
            $hex = array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F');
            for ($i = 0; $i < 3; $i++) {
                $r = null;
                $c = $match[$i];
                $hexAr = array();
                while ($c > 16) {
                    $r = $c % 16;
                    $c = ($c / 16) >> 0;
                    array_push($hexAr, $hex[$r]);
                }
                array_push($hexAr, $hex[$c]);
                $ret = array_reverse($hexAr);
                $item = implode('', $ret);
                $item = str_pad($item, 2, '0', STR_PAD_LEFT);
                $hexColor .= $item;
            }
            return $hexColor;
        }
        /**
         * 十六进制 转 RGB
         */
        function hex2rgb($hexColor) {
            $color = str_replace('#', '', $hexColor);
            if (strlen($color) > 3) {
                $rgb = array(
                    'r' => hexdec(substr($color, 0, 2)),
                    'g' => hexdec(substr($color, 2, 2)),
                    'b' => hexdec(substr($color, 4, 2))
                );
            } else {
                $color = $hexColor;
                $r = substr($color, 0, 1) . substr($color, 0, 1);
                $g = substr($color, 1, 1) . substr($color, 1, 1);
                $b = substr($color, 2, 1) . substr($color, 2, 1);
                $rgb = array(
                    'r' => hexdec($r),
                    'g' => hexdec($g),
                    'b' => hexdec($b)
                );
            }
            return $rgb;
        }
    ————————————————
    版权声明:本文为CSDN博主「二東」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/shaerdong/article/details/46805807
    

    相关文章

      网友评论

          本文标题:开发企业网站11 -- 图片加水印

          本文链接:https://www.haomeiwen.com/subject/rjjwnctx.html