Heim  >  Artikel  >  php教程  >  对图片进行水印添加以及生成缩率图

对图片进行水印添加以及生成缩率图

PHP中文网
PHP中文网Original
2016-05-23 16:41:041257Durchsuche

2个方法
1 给图片进行水印添加
2生成一个新的缩率图

php代码

<?php 
    class Image{
        //水印配置项
        private $waterOn;
        private $waterImg;
        private $waterPos;
        private $waterPct;
        private $waterText;
        private $waterFont;
        private $waterTextSize;
        private $waterTextColor;
        private $qua;
        //缩略图配置项
        private $thumbWidth;
        private $thumbHeight;
        private $thumbType;
        private $thumbEndfix;
        //构造函数
        public function __construct(){
            $this->waterOn=C("WATER_ON");
            $this->waterImg=C("WATER_IMG");
            $this->waterPos=C("WATER_POS");
            $this->waterPct=C("WATER_PCT");
            $this->waterText=C("WATER_TEXT");
            $this->waterFont=C("WATER_FONT");
            $this->waterTextSize=C("WATER_TEXT_SIZE");
            $this->waterTextColor=C("WATER_TEXT_COLOR");
            $this->qua=C("WATER_QUA");
            //缩率图
            $this->thumbWidth=C("THUMB_WIDTH");
            $this->thumbHeight=C("THUMB_HEIGHT");
            $this->thumbType=C("THUMB_TYPE");
            $this->thumbEndFix=C("THUMB_ENDFIX");
            }
        /*
        *验证图片是否合法
        */ 
        private function check($img){
            return is_file($img)&&getimagesize($img)&&extension_loaded("gd");
            }
        /*
        *缩率图
        *@param string  $img         原图
        *@param string  $outFile     缩率之后存储的图片
        *@param int     $thumbWidth  缩率图宽度
        *@param int     $thumbHeight 缩率图高度
        *@param int     $thumbType   那种方式进行缩略处理
        */ 
        public function thumb($img,$outFile="",$thumbWidth="",$thumbHeight="",$thumbType=""){
            if(!$this->check($img)){
                return false;
                }
            //缩率图处理方式   
            $thumbType=$thumbType?$thumbType:$this->thumbType;
            //缩率图宽度
            $thumbWidth=$thumbWidth?$thumbWidth:$this->thumbWidth;   
            //缩率图高度
            $thumbHeight=$thumbHeight?$thumbHeight:$this->thumbHeight;
            //获取原图信息
            $imgInfo=getimagesize($img);
            //原图宽度
            $imgWidth=$imgInfo[0];
            //原图高度
            $imgHeight=$imgInfo[1];
            //获得原图类型
            $imgtype=image_type_to_extension($imgInfo[2]);
            //根据不同的缩略处理方式,获得尺寸(原图和缩略图相应的尺寸)
            $thumb_size=$this->thumbsize($imgWidth,$imgHeight,$thumbWidth,$thumbHeight,$thumbType);
            //创建原图
            $func="imagecreatefrom".substr($imgtype,1);//变量函数
            $resImg=$func($img);
            //创建缩率图画布
            if($imgtype==".gif"){
                $res_thumb=imagecreate($thumb_size[2],$thumb_size[3]);
                }else{
                    $res_thumb=imagecreatetruecolor($thumb_size[2],$thumb_size[3]);
                    }
            imagecopyresized($res_thumb,$resImg,0,0,0,0,$thumb_size[2],$thumb_size[3],$thumb_size[0],$thumb_size[1]);
            $fileInfo=pathinfo($img);//文件信息
            $outFile=$outFile?$outFile:$fileInfo[&#39;filename&#39;].$this->thumbEndFix.$fileInfo[&#39;extension&#39;];//文件名称
            $outFile=$fileInfo["dirname"]."/".$outFile;//加上目录
            $func="image".substr($imgtype,1);
            $func($res_thumb,$outFile); 
            return $outFile;
            }   
        private function thumbSize($imgWidth,$imgHeight,$thumbWidth,$thumbHeight,$thumbType){
            //缩率图尺寸
            $w=$thumbWidth;
            $h=$thumbHeight;
            //原图尺寸
            $img_w=$imgWidth;
            $img_h=$imgHeight;
            switch($thumbType){
                case 1:
                    //宽度固定,高度自增
                    $h=$w/$imgWidth*$imgHeight;
                    break;
                case 2://高度固定,宽度自   
                    $w=$h/$imgHeight*$imgWidth;
                    break;
                case 3:
                    if($imgHeight/$thumbHeight>$imgWidth/$thumbWidth){
                        $img_h=$imgWidth/$thumbWidth*$thumbHeight;
                        }else{
                            $img_w=$imgHeight/$thumbHeight*$thumbWidth;
                            }
                }
                return array($img_w,$img_h,$w,$h);
            }
        /*
        *@param string  $img     原图
        *@param string  $outImg  加完水印后生成的图
        *@param int     $pos     水印位置
        *@param int     $pct     透明度
        *@param text    $text    水印文字
        *@param string  $waterImg水印图片       
        */ 
        public function water($img,$outImg=null,$pos="",$pct="",$text="",$waterImg="",$textColor=""){
            if(!$this->check($img)){
                return false;
                }
            //加完水印后生成的图
            $outImg=$outImg?$outImg:$img;
            //水印位置
            $pos=$pos?$pos:$this->waterPos;
            //透明度
            $pct=$pct?$pct:$this->waterPct;
            //水印文字
            $text=$text?$text:$this->waterText;
            //水印图片
            $waterImg=$waterImg?$waterImg:$this->waterImg;
            //验证水印图片
            $waterImgOn=$this->check($waterImg); 
            //水印文字颜色
            $textColor=$textColor?$textColor:$this->waterTextColor;
            //原图信息
            $imgInfo=getimagesize($img);
            //原图宽度
            $imgWidth=$imgInfo[0];
            //原图高度
            $imgHeight=$imgInfo[1];
            switch($imgInfo[2]){
                case 1:
                    $resImg=imagecreatefromgif($img);
                    break;
                case 2:
                    $resImg=imagecreatefromjpeg($img);
                    break;
                case 3:
                    $resImg=imagecreatefrompng($img);
                    break;      
                }
            if($waterImgOn){//水印图片有效
                //水印信息
                $waterInfo=getimagesize($waterImg);
                //水印宽度
                $waterWidth=$waterInfo[0];
                //水印高度
                $waterHeight=$waterInfo[1];
                //根据不同的情况创建不同的类型 gif jpeg png
                $w_img=null;
                switch($waterInfo[2]){
                    case 1:
                        $w_img=imagecreatefromgif($waterImg);
                        break;
                    case 2:
                        $w_img=imagecreatefromjpeg($waterImg);
                        break;
                    case 3:
                        $w_img=imagecreatefrompng($waterImg);       
                    }
                }else{//水印图片失效,使用文字水印
                    if(empty($text)||strlen($textColor)!==7){
                        return false;
                        }
                    //获得文字水印盒子信息
                    $textInfo=imagettfbbox($this->waterTextSize,0,$this->waterFont,$text);
                    //文字信息宽度
                    $textWidth=$textInfo[2]-$textInfo[6];
                    //文字信息高度    
                    $textHeight=$textInfo[3]-$textInfo[7];
                    }
                //水印位置
                $x=$y=20;
                switch($pos){
                    case 1:
                        break;
                    case 2:
                        $x=($imgWidth-$waterWidth)/2;
                        break;
                    case 3:
                        $y=$imgWidth-$waterWidth-10;
                        break;
                    case 4:
                        $x=($imgHeight-$waterHeight)/2;
                        break;
                    case 5:
                        $x=($imgWidth-$waterWidth)/2;
                        $y=($imgHeight-$waterHeight)/2; 
                        break;
                    case 6:
                        $x=$imgWidth-$waterWidth-10;
                        $y=($imgHeight-$waterHeight)/2;
                        break;
                    case 7:
                        $x=$imgHeight-$waterHeight-10;
                        break;
                    case 8:
                        $x=($imgWidth-$waterWidth)/2;
                        $y=$imgHeight-$waterHeight-10;
                        break;
                    case 9:
                        $x=$imgWidth-$waterWidth-10;
                        $y=$imgHeight-$waterHeight-10;      
                        break;
                    default:
                        $x=mt_rand(20,$imgWidth-$waterWidth);
                        $y=mt_rand(20,$imgHeight-$waterHeight);         
                    }   
                if($waterImgOn){//当水印图片有效时,以图片形式加水印
                    if($waterInfo[2]==3){
                        imagecopy($resImg,$w_img,$x,$y,0,0,$waterWidth,$waterHeight);
                        }else{
                            imagecopymerge($resImg,$w_img,$x,$y,0,0,$waterInfo,$waterHeight,$pct);
                            }
                    }else{//水印图片失效,以文字水印加
                        $red=hexdec(substr($this->waterTextColor,1,2));
                        $greem=hexdec(substr($this->waterTextColor,3,2));
                        $blue=hexdec(substr($this->waterTextColor,5,2));
                        $color=imagecolorallocate($resImg,$red,$greem,$blue);
                        imagettftext($resImg,$this->waterTextSize,0,$x,$y,$color,$this->waterFont,$text);
                        }
                //输出图片      
                switch($imgInfo[2]){
                        case 1:
                            imagegif($resImg,$outImg);
                            break;
                        case 2:
                            imagejpeg($resImg,$outImg);
                            break;
                        case 3:
                            imagepng($resImg,$outImg);
                            break;      
                    }   
                //垃圾回收
                if(isset($resImg)){
                    imagedestroy($resImg);
                    }
                if(isset($w_img)){
                    imagedestroy($w_img);
                    }   
                return true;                
            }   
        }
?>
<?php 
return array(
    //水印处理
    "WATER_ON"=>1,//水印开关
    "WATER_IMG"=>"./data/logo.png",//水印图片
    "WATER_POS"=>9,//水印位置
    "WATER_PCT"=>80,//水印透明度
    "WATER_TEXT"=>"http://www.caoxiaobin.cn",
    "WATER_FONT"=>"./data/simsunb.ttf",//水印字体
    "WATER_TEXT_COLOR"=>"#333333",//文字颜色 16进制表示
    "WATER_TEXT_SIZE"=>16,//文字大小
    "WATER_QUA"=>80,//图片压缩比
    //缩略图
    "THUMB_WIDTH"=>150,//缩率图宽度
    "THUMB_HEIGHT"=>150,//缩略图高度
    "THUMB_TYPE"=>1,//缩略图处理  1宽度固定,高度自增 2高度固定,宽度自增 //缩略图尺寸不变,对原图进行裁切
    "THUMB_ENDFIX"=>"_thmub"//缩略图后缀
     
);
?>
/*
 * 不区分大小写的数据键检测
 */
function array_key_exists_d($key,$arr){
    $_key=strtolower($key);
    foreach ($arr as $k=>$v){
        if($_key==strtolower($k)){
            return true;
        }
    }
}
/*
 * 递归更改数组的KEY(键名)
 * @param array;
 * @stat int 0小写 1大写
 */
function array_change_key_case_d($arr,$stat=0){
    $func=$stat?"strtoupper":"strtolower";
    $_newArr=array();
    if(!is_array($arr)||empty($arr)){
        return $_newArr;
    }
    foreach($arr as $k=>$v){
        $_k=$func($k);//通过变量函数转换KEY大小写
        $_newArr[$_k]= is_array($v)?array_change_key_case_d($v):$v;
    }
    return $_newArr;
}
/*
 * 读取与设置配置项
 * @param $name void 配置项名称,如果不填写返回所有配置项
 * @param $value void 配置项的值
 * @param $value 值 false null 只取$name值
 */
function C($name=null,$value=null){
    static $config=array();//静态变量$config存储所有配置项
    if(is_null($name)){
        return $config;
    }
    //如果$name为数组
    if(is_array($name)){
        return $config=array_merge($config,array_change_key_case_d($name,1));
    }
    //$name为字符串 2种情况 $value无值表示获得配置项的值,有值表示更改配置项
    if(is_string($name)){
        $name=  strtoupper($name);
        //获得配置项的值
        if(is_null($value)){
          return  array_key_exists_d($name,$config)?$config[$name]:null;
        }else{
            //设置值
            $config[$name]=$value;
            return true;
        }
    }
}
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn