• 技术文章 >后端开发 >PHP问题

    php图片增加水印的方法

    藏色散人藏色散人2021-05-14 09:43:35原创375

    php图片增加水印的方法:1、通过“waterText('banner.jpg', 9, '','xx.com');”设置文字水印;2、通过“imageWaterMark('404.jpg', 9, 'logo.gif');”设置图片水印。

    本文操作环境:Windows7系统、PHP7.1版、Dell G3电脑。

    PHP给图片加上图片水印和文字水印实例

    下面给大家分享一下PHP给图片加上图片水印和文字水印实例,这也是网站经常用到的功能,把代码加上去,调用就很简单了。

    核心代码:

    function imageWaterMark($groundImage, $waterPos = 0, $waterImage = "", $waterText = "", $textFont = 5, $textColor = "#FF0000") {
    
        $isWaterImage = FALSE;
    
        $formatMsg = "暂不支持该文件格式,请用图片处理软件将图片转换为GIF、JPG、PNG格式。";
    
        //读取水印文件
    
        if (!empty($waterImage) && file_exists($waterImage)) {
    
            $isWaterImage = TRUE;
    
            $water_info = getimagesize($waterImage);
    
            $water_w = $water_info[0]; //取得水印图片的宽
    
            $water_h = $water_info[1]; //取得水印图片的高
    
            switch ($water_info[2]) {//取得水印图片的格式
                case 1:$water_im = imagecreatefromgif($waterImage);
                    break;
    
                case 2:$water_im = imagecreatefromjpeg($waterImage);
                    break;
    
                case 3:$water_im = imagecreatefrompng($waterImage);
                    break;
    
                default:die($formatMsg);
            }
        }
    
        //读取背景图片
    
        if (!empty($groundImage) && file_exists($groundImage)) {
    
            $ground_info = getimagesize($groundImage);
    
            $ground_w = $ground_info[0]; //取得背景图片的宽
    
            $ground_h = $ground_info[1]; //取得背景图片的高
    
            switch ($ground_info[2]) {//取得背景图片的格式
                case 1:$ground_im = imagecreatefromgif($groundImage);
                    break;
    
                case 2:$ground_im = imagecreatefromjpeg($groundImage);
                    break;
    
                case 3:$ground_im = imagecreatefrompng($groundImage);
                    break;
    
                default:die($formatMsg);
            }
        } else {
    
            die("需要加水印的图片不存在!");
        }
    
        //水印位置
    
        if ($isWaterImage) {//图片水印
            $w = $water_w;
    
            $h = $water_h;
    
            $label = "图片的";
        } else {//文字水印
            $temp = imagettfbbox(ceil($textFont * 5), 0, "./cour.ttf", $waterText); //取得使用 TrueType 字体的文本的范围
    
            $w = $temp[2] - $temp[6];
    
            $h = $temp[3] - $temp[7];
    
            unset($temp);
    
            $label = "文字区域";
        }
    
        if (($ground_w < $w) || ($ground_h < $h)) {
    
            echo "需要加水印的图片的长度或宽度比水印" . $label . "还小,无法生成水印!";
    
            return;
        }
    
        switch ($waterPos) {
    
            case 0://随机
    
                $posX = rand(0, ($ground_w - $w));
    
                $posY = rand(0, ($ground_h - $h));
    
                break;
    
            case 1://1为顶端居左
    
                $posX = 0;
    
                $posY = 0;
    
                break;
    
            case 2://2为顶端居中
    
                $posX = ($ground_w - $w) / 2;
    
                $posY = 0;
    
                break;
    
            case 3://3为顶端居右
    
                $posX = $ground_w - $w;
    
                $posY = 0;
    
                break;
    
            case 4://4为中部居左
    
                $posX = 0;
    
                $posY = ($ground_h - $h) / 2;
    
                break;
    
            case 5://5为中部居中
    
                $posX = ($ground_w - $w) / 2;
    
                $posY = ($ground_h - $h) / 2;
    
                break;
    
            case 6://6为中部居右
    
                $posX = $ground_w - $w;
    
                $posY = ($ground_h - $h) / 2;
    
                break;
    
            case 7://7为底端居左
    
                $posX = 0;
    
                $posY = $ground_h - $h;
    
                break;
    
            case 8://8为底端居中
    
                $posX = ($ground_w - $w) / 2;
    
                $posY = $ground_h - $h;
    
                break;
    
            case 9://9为底端居右
    
                $posX = $ground_w - $w - 10;   // -10 是距离右侧10px 可以自己调节
    
                $posY = $ground_h - $h - 10;   // -10 是距离底部10px 可以自己调节
    
                break;
    
            default://随机
    
                $posX = rand(0, ($ground_w - $w));
    
                $posY = rand(0, ($ground_h - $h));
    
                break;
        }
    
        //设定图像的混色模式
    
        imagealphablending($ground_im, true);
    
        if ($isWaterImage) {//图片水印
            imagecopy($ground_im, $water_im, $posX, $posY, 0, 0, $water_w, $water_h); //拷贝水印到目标文件
        } else {//文字水印
            if (!emptyempty($textColor) && (strlen($textColor) == 7)) {
    
                $R = hexdec(substr($textColor, 1, 2));
    
                $G = hexdec(substr($textColor, 3, 2));
    
                $B = hexdec(substr($textColor, 5));
            } else {
    
                die("水印文字颜色格式不正确!");
            }
    
            imagestring($ground_im, $textFont, $posX, $posY, $waterText, imagecolorallocate($ground_im, $R, $G, $B));
        }
    
        //生成水印后的图片
    
        @unlink($groundImage);
    
        switch ($ground_info[2]) {//取得背景图片的格式
            case 1:imagegif($ground_im, $groundImage);
                break;
    
            case 2:imagejpeg($ground_im, $groundImage);
                break;
    
            case 3:imagepng($ground_im, $groundImage);
                break;
    
            default:die($errorMsg);
        }
    
        //释放内存
    
        if (isset($water_info))
            unset($water_info);
    
        if (isset($water_im))
            imagedestroy($water_im);
    
        unset($ground_info);
    
        imagedestroy($ground_im);
    }

    文字水印:

    waterText('banner.jpg', 9, '','sucaihuo.com'); //背景图片,$waterPos水印位置,水印图片地址

    图片水印:

    imageWaterMark('404.jpg', 9, 'logo.gif'); //背景图片,$waterPos水印位置,水印图片地址

    注意:$waterImage 和 $waterText 最好不要同时使用,选其中之一即可,优先使用 $waterImage。

    推荐学习:《PHP视频教程

    以上就是php图片增加水印的方法的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:php
    上一篇:CentOS7如何为PHP安装MSSQL扩展 下一篇:php如何找到php.ini
    大前端线上培训班

    相关文章推荐

    • linux怎样安装php5• PHP7如何快速安装WEB服务器• php怎么截取中文字符串前几位• php中文日期怎么转为时间戳• php ajax提交中文乱码怎么办

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网