zoukankan      html  css  js  c++  java
  • PHP给图片加水印

    <?php
    
    /**
     *图片加水印
     *@param $srcImg 原图
     *@param $waterImg 水印图片
     *@param $savepath 保存路径
     *@param $savename 保存名字
     *@param $position 水印位置
     *1:左上  2:右上 3:居中 4:左下 5:右下
     *@param $opacity 透明度
     *0:全透明 100:完全不透明
     *@return  成功 -- 加水印后的新图片地址
     *         失败 -- -1:源文件不存在,-2:水印不存在,-3源文件图片对象建立失败,-4:水印文件图像对象建立失败,-5:加水印后的新图片保存失败
     * 获取源文件路径、宽高等信息,得出保存后文件保存路径、水印放置位置->建立源文件和水印图片对象->合并图片对象(imagecopymerge)->销毁图片对象
     */
    
    
    function img_create_from_ext($imgfile){
        $info = getimagesize($imgfile);
        $im = null;
        switch ($info[2]) {
            case 1:
                $im = imagecreatefromgif($imgfile);
                break;
            case 2:
                $im = imagecreatefromjpeg($imgfile);
                break;
            case 3:
                $im = imagecreatefrompng($imgfile);
                break;
        }
        return $im;
    }
    
    function img_water_mark($srcImg, $waterImg, $savepath=null, $savename=null, $position=5, $opacity=50){
        $temp = pathinfo($srcImg);
        $name = $temp['basename'];
        $path = $temp['dirname'];
        $exte = $temp['extension'];
        $savename = $savename ? $savename : $name;
        $savepath = $savepath ? $savepath : $path;
        $savefile = $savepath.'/'.$savename; 
    
        $srcinfo = @getimagesize($srcImg);
        if(!$srcinfo){
            return -1;
        }
        $waterinfo = @getimagesize($waterImg);
        if(!$waterinfo){
            return -2;
        }
        $srcImgObj = img_create_from_ext($srcImg);
        if(!$srcImgObj){
            return -3;
        }
        $waterImgObj = img_create_from_ext($waterImg);
        if(!$waterImgObj){
            return -4;
        }
        switch ($position) {
            case 1:
                $x=$y=0;
                break;
            case 2:
                $x=$srcinfo[0] - $waterinfo[0];
                $y=0;
                break;
            case 3:
                $x=($srcinfo[0] - $waterinfo[0])/2;
                $y=($srcinfo[1] - $waterinfo[1])/2;
                break;
            case 4:
                $x=0;
                $y=$srcinfo[1] - $waterinfo[1];
                break;
            case 5:
                $x=$srcinfo[0] - $waterinfo[0];
                $y=$srcinfo[1] - $waterinfo[1];
                break;
        }
        // 合并图片+水印
        imagecopymerge($srcImgObj, $waterImgObj, $x, $y, 0, 0, $waterinfo[0], $waterinfo[1], $opacity);
    
        switch ($srcinfo[2]) {
            case 1:
                imagegif($srcImgObj, $savefile);
                break;
            case 2:
                imagejpeg($srcImgObj, $savefile);
                break;
            case 3:
                imagepng($srcImgObj, $savefile);
                break;
            default: return -5;
        }
        imagedestroy($srcImgObj);
        imagedestroy($waterImgObj);
        return $savefile;
    }
    
    
    ?>
  • 相关阅读:
    负载均衡
    重写类的Equals以及重写Linq下的Distinct方法
    关于URLEnCode,URLDeCode,Base64,公钥私钥
    JAVA 从头开始<六>
    JAVA 从头开始<五>
    JAVA 从头开始<四>
    JAVA 从头开始<三>
    JAVA 从头开始<二>
    JAVA 从头开始<一>
    ASP.Net MVC OA项目笔记<六>
  • 原文地址:https://www.cnblogs.com/wangmeijian/p/6096937.html
Copyright © 2011-2022 走看看