当前位置 : 主页 > 网络编程 > PHP >

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

来源:互联网 收集:自由互联 发布时间:2021-06-30
2个方法 1给图片进行水印添加 2生成一个新的缩率图 1. [代码] [PHP]代码 ?php class Image{//水印配置项private $waterOn;private $waterImg;private $waterPos;private $waterPct;private $waterText;private $waterFont;priv
2个方法
1 给图片进行水印添加
2生成一个新的缩率图

1. [代码][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['filename'].$this->thumbEndFix.$fileInfo['extension'];//文件名称
			$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;				
			}	
		}
?>

2. [代码][PHP]代码    

<?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"//缩略图后缀
	
);
?>

3. [代码][PHP]代码    

/*
 * 不区分大小写的数据键检测
 */
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;
        }
    }
}
网友评论