• Linux
  • apache
  • centos
  • Git版本管理
  • Linux基本命令
  • linux配置与优化
  • Nginx
  • PHP
  • Redis
  • Supervisor
  • Swoole
  • windows
  • THINKPHP
  • 开发者手册
  • Chat GPT / Open Ai
  • PHP给图片加上图片水印和文字水印实例

    全屏阅读
  • 基本信息
  • 作者:
  • 作者已发布:925篇文章
  • 发布时间:2022年03月27日 22:06:04
  • 所属分类:PHP+MySql, PHP原生源码
  • 阅读次数:1030次阅读
  • 标签:
  • 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。

    顶一下
    (0)
    100%
    订阅 回复
    踩一下
    (0)
    100%
    » 郑重声明:本文由mpxq168发布,所有内容仅代表个人观点。版权归恒富网mpxq168共有,欢迎转载, 但未经作者同意必须保留此段声明,并给出文章连接,否则保留追究法律责任的权利! 如果本文侵犯了您的权益,请留言。
  • 【上一篇】
  • 【下一篇】
  • 目前有 0 条留言 其中:访客:0 条, 博主:0 条

    给我留言

    您必须 [ 登录 ] 才能发表留言!