美文网首页PHP是世界上最好的语言
PHP实现添加图片水印函数封装

PHP实现添加图片水印函数封装

作者: 金星show | 来源:发表于2018-06-04 11:46 被阅读0次
    <?php  
    /** 
    *@param [string] 传过来的参数是文件名字符串 
    *@return [array] 返回值是一个数组,包含图片宽度、高度、创建和输出的字符串以及扩展名 
    */  
    function getImageInfo($filename){  
        if(@!$info=getimagesize($filename)){//getimagesize()函数可以得到文件信息,  
            //还可以判断图片是否为真实的图片类型,详细功能见PHP手册  
            exit('文件不是真实图片');  
        }  
        //print_r($info);可以查手册看一下这个数组中每个参数的含义  
        $fileInfo['width']=$info[0];  
        $fileInfo['height']=$info[1];  
        $mime=image_type_to_mime_type($info[2]);//info[2]这个是图片类型对应的数字,此函数可以根据该数字返回出文件对应的MIME类型,详细见手册  
        //echo $mime;看一下这个$mime的输出格式,你就会理解下面为什么会这么做了  
        $createFun=str_replace('/', 'createfrom', $mime);//将$mime中的'/'替换成'createfrom',  
        //因为后边要用到imagecreatefromjpeg/jpg/png 这个函数,这样就可以动态使用不同的函数了  
        $outFun=str_replace('/', '', $mime);  
        $fileInfo['createFun']=$createFun;  
        $fileInfo['outFun']=$outFun;  
        $fileInfo['ext']=strtolower(image_type_to_extension($info[2]));//image_type_to_extension()是得到文件后缀名函数  
        return $fileInfo;//返回文件信息  
    }  
      
    function waterImage($dstName,$srcName,$position=0,$dest='images/waterImage',$pre='waterImage_',$pct=50,$delSource=false){  
        // $dstName='images/2.jpg';  
        // $srcName='images/1.png';  
        // $position=0;//图片水印的位置  0代表左上角  
        // $pct=50;//大概是表示图片水印的透明度吧  
        // $dest='images/waterImage';//默认保存的位置  
        // $pre='waterImage_';//默认文件名前缀  
        // //获取图片信息  
        $dstInfo=getImageInfo($dstName);  
        $srcInfo=getImageInfo($srcName);  
        //创建画布  
        $dst_im=$dstInfo['createFun']($dstName);  
        $src_im=$srcInfo['createFun']($srcName);  
        $src_width=$srcInfo['width'];  
        $src_height=$srcInfo['height'];  
        $dst_width=$dstInfo['width'];  
        $dst_height=$dstInfo['height'];  
      
        switch ($position) {  
            case 0://左上角位置  
                $x=0;  
                $y=0;  
            break;  
            case 1://中间位置  
                $x=($dst_width-$src_width)/2;  
                $y=0;  
            break;  
            case 2://右上角  
                $x=$dst_width-$src_width;  
                $y=0;  
            break;  
            case 3://左中位置  
                $x=0;  
                $y=($dst_height-$src_height)/2;  
            break;  
            case 4://正中间位置  
                $x=($dst_width-$src_width)/2;  
                $y=($dst_height-$src_height)/2;  
            break;  
            case 5://右中位置  
                $x=$dst_width-$src_width;  
                $y=($dst_height-$src_height)/2;  
            break;  
            case 6://左下角位置  
                $x=0;  
                $y=$dst_height-$src_height;  
            break;  
            case 7://下中位置  
                $x=($dst_width-$src_width)/2;  
                $y=$dst_height-$src_height;  
            break;  
            case 8://右下角位置  
                $x=$dst_width-$src_width;  
                $y=$dst_height-$src_height;  
            break;  
            default:  
                $x=0;  
                $y=0;  
            break;  
        }  
        //图片合并(函数用法及参数含义见手册)  
        imagecopymerge($dst_im, $src_im, $x, $y, 0, 0, $src_width, $src_height, $pct);  
        if($dest && !file_exists($dest)){  
            mkdir($dest,0777,true);  
        }  
        $randNum=mt_rand(100000,999999);  
        $dstName="{$pre}{$randNum}".$dstInfo['ext'];  
        $destination=$dest?$dest.'/'.$dstName:$dstName;  
        $dstInfo['outFun']($dst_im,$destination);  
        imagedestroy($src_im);  
        imagedestroy($dst_im);  
        if($delSource){  
            @unlink($filename);  
        }  
        return $destination;  
    }  
    $filename="images/4.jpg";  
    $logo="images/1.png";  
    //waterImage($filename,$logo,4);  
    waterImage($filename,$logo,8);  
    ?>  
    

    相关文章

      网友评论

        本文标题:PHP实现添加图片水印函数封装

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