IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> php添加水印 -> 正文阅读

[PHP知识库]php添加水印

操作水印函数

   /**
     * 设置水印  zst
     * @param $imgSrc           待处理图片全路径
     * @param $markImg          水印图片全路径
     * @param $watermark_file   处理完毕水印图片路径
     * @param $markType         图片添加水印的方式,img代表以图片方式,text代表以文字方式添加水印
     * @param int $markPos 图片水印添加的位置默认为0,取值范围:0~9  0:随机位置,在1~8之间随机选取一个位置 1:顶部居左 2:顶部居中 3:顶部居右 4:左边居中 5:图片中心 6:右边居中 7:底部居左 8:底部居中 9:底部居右
     * @param $markText         给图片添加的水印文字
     * @param $TextColor        水印文字的字体颜色
     * @param $fontType         具体的字体库,可带相对目录地址
     */
    public static function  setWater($imgSrc, $markImg, $watermark_file, $markType, $markPos, $markText, $TextColor, $fontType)
    {

        $srcInfo = @getimagesize($imgSrc);
        $srcImg_w = $srcInfo[0];
        $srcImg_h = $srcInfo[1];

        switch ($srcInfo[2]) {
            case 1:
                $srcim = imagecreatefromgif($imgSrc);
                break;
            case 2:
                $srcim = imagecreatefromjpeg($imgSrc);
                break;
            case 3:
                $srcim = imagecreatefrompng($imgSrc);
                break;
            default:
                throw new \Exception("不支持的图片文件类型");
                exit;
        }

        /*合成水印路径为空就覆盖原图*/
        if (empty($watermark_file)) {
            $watermark_file = $imgSrc;
        }

        if (!strcmp($markType, "img")) {
            if (!file_exists($markImg) || empty($markImg)) {
                return;
            }

            $markImgInfo = @getimagesize($markImg);
            $markImg_w = $markImgInfo[0];
            $markImg_h = $markImgInfo[1];

            if ($srcImg_w < $markImg_w || $srcImg_h < $markImg_h) {
                return;
            }

            switch ($markImgInfo[2]) {
                case 1:
                    $markim = imagecreatefromgif($markImg);
                    break;
                case 2:
                    $markim = imagecreatefromjpeg($markImg);
                    break;
                case 3:
                    $markim = imagecreatefrompng($markImg);
                    break;
                default:
                    die("不支持的水印图片文件类型");
                    exit;
            }

            $logow = $markImg_w;
            $logoh = $markImg_h;
        }

        if (!strcmp($markType, "text")) {
            $fontSize = 16;
            if (!empty($markText)) {
                if (!file_exists($fontType)) {
                    return;
                }
            } else {
                return;
            }

            $box = @imagettfbbox($fontSize, 0, $fontType, $markText);
            $logow = max($box[2], $box[4]) - min($box[0], $box[6]);
            $logoh = max($box[1], $box[3]) - min($box[5], $box[7]);
        }

        if ($markPos == 0) {
            $markPos = rand(1, 9);
        }

        switch ($markPos) {
            case 1:
                $x = +5;
                $y = +5;
                break;
            case 2:
                $x =    ($srcImg_w - $logow) / 2;
                $y = +5;
                break;
            case 3:
                $x = $srcImg_w - $logow - 5;
                $y = +15;
                break;
            case 4:
                $x = +5;
                $y = ($srcImg_h - $logoh) / 2;
                break;
            case 5:
                $x = ($srcImg_w - $logow) / 2;
                $y = ($srcImg_h - $logoh) / 2;
                break;
            case 6:
                $x = $srcImg_w - $logow - 5;
                $y = ($srcImg_h - $logoh) / 2;
                break;
            case 7:
                $x = +5;
                $y = $srcImg_h - $logoh - 5;
                break;
            case 8:
                $x = ($srcImg_w - $logow) / 2;
                $y = $srcImg_h - $logoh - 5;
                break;
            case 9:
                $x = $srcImg_w - $logow - 5;
                $y = $srcImg_h - $logoh - 5;
                break;
            default:
                die("此位置不支持");
                exit;
        }

        $dst_img = @imagecreatetruecolor($srcImg_w, $srcImg_h);

        imagecopy($dst_img, $srcim, 0, 0, 0, 0, $srcImg_w, $srcImg_h);

        if (!strcmp($markType, "img")) {
            imagecopy($dst_img, $markim, $x, $y, 0, 0, $logow, $logoh);
            imagedestroy($markim);
        }

        if (!strcmp($markType, "text")) {
            $rgb = explode(',', $TextColor);

            $color = imagecolorallocate($dst_img, $rgb[0], $rgb[1], $rgb[2]);
            imagettftext($dst_img, $fontSize, 0, $x, $y, $color, $fontType, $markText);
        }

        switch ($srcInfo[2]) {
            case 1:
                imagegif($dst_img, $watermark_file);
                break;
            case 2:
                imagejpeg($dst_img, $watermark_file);
                break;
            case 3:
                imagepng($dst_img, $watermark_file);
                break;
            default:
                die("不支持的水印图片文件类型");
                exit;
        }

        unlink($markImg);
        imagedestroy($dst_img);
        imagedestroy($srcim);
    }

转换图片格式(gd库,imagegick扩展插件)

1,gd库
 $webpIm = imagecreatefromwebp($imgSrc);  //获取文件im码
          imagejpeg($webpIm,$imgSrc,100);        // (文件im编码,文件路径,转换质量)
         
2,imagegick插件
		    $img = new \Imagick($imgSrc);	//倒入文件路径
            $img->setImageFormat('jpeg');   // 转换文件格式
            $img->writeImage($imgSrc);		// 写出文件路径

图片操作

  /**
     * 内部:操作图片
     * @param $imagePath 文件路径
     * @param $imageinfo [ 'height' , 'width']
     * @param float $percent 缩放比例
     */
    private static function thumpImage($imagePath, $imageinfo, $percent = 0.5)
    {
        if ($percent > 1 && $percent < $imageinfo['height'] && $percent < $imageinfo['width']) {
            if ($imageinfo['height'] < $imageinfo['width']) {
                $percent = $percent / $imageinfo['height'];
            } else {
                $percent = $percent / $imageinfo['width'];
            }
        }
        $ratio = $percent > 1 ? 1 : $percent;
        $new_width = $imageinfo['width'] * $ratio;
        $new_height = $imageinfo['height'] * $ratio;

        // 根據文件路徑獲取 Imagick 對象
        $image = new \Imagick($imagePath);
//縮放到 200x100
        $image->scaleImage($new_width, $new_height);
        $temp_path = \Yii::$app->getBasePath().'/../web/static/'.time().'.png';
        $image->writeImage($temp_path);

        return [$temp_path, $new_width, $new_height];
    }
  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-04-22 18:16:01  更:2022-04-22 18:16:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 12:05:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码