PHP图片类(验证码,水印,缩略)

/** 燕十八 公益PHP培训 课堂地址:YY频道88354001 学习社区:www.zixue.it **/
class image{
		static $errno=null;
		static $error=array(
			'1'=>'原图或者水印不存在',
			'2'=>'水印图片宽高不能大于原图',
			'3'=>'原图无法创建画布',
			'4'=>'水印图无法创建画布',
			'5'=>'加水印失败',
			'6'=>'原图加水印的效果图无法创建画布',
			'7'=>'保存水印效果图失败',
			'8'=>'要缩略的图片不存在',
			'9'=>'缩略的图片宽高不能小于效果图的宽高',
			'10'=>'缩略图的画布无法创建',
			'11'=>'缩略失败',
		    '12'=>'生成缩略效果图片文件失败'
		);
		/* 
		水印 
		所用主要函数imagestring
		int $strnum 验证码中字符串的个数
		int $width 验证码区域的宽度
		int $height 验证码区域的高度
		*/
		static function verify($strnum,$width,$height){
			$im=imagecreatetruecolor($width,$height);
			$bgcolor=imagecolorallocate($im,200,200,200);
			imagefill($im,0,0,$bgcolor);
			$str='abcdefghijkmnpqrstuvwxyz23456789';
			$str=substr(str_shuffle($str),0,$strnum);//获取随机字符串
			for($i=0,$j=$width/$strnum;$i<$strnum;$i++){
				$strcolor=imagecolorallocate($im,mt_rand(0,100),mt_rand(0,100),mt_rand(0,100));
				imagestring($im,5,$j*$i+5,mt_rand(1,$height/4),$str[$i],$strcolor);
			}
			header('Content-type:image/png');
			imagepng($im);
			imdestroy($im);
		}
		/*
			水印
			函数:imagecopymerge
			string dst 要加水印的图片(目标图)
			string src 用来当做水印的图片(水印图)
			string savename 加水印后的效果图
			int $postion 水印位置 0左上角 1右上角 2右下角 3左下角
			int $pct 透明度

		*/

		static function water($dst,$src,$savename='',$postion=2,$pct=50){
			if(!file_exists($dst)||!file_exists($src)){
				self::$errno=1;
				return false;
			}
			$dstinfo=self::getImgInfo($dst);
			$srcinfo=self::getImgInfo($src);
			if(($dstinfo['width']<$srcinfo['width'])||($dstinfo['height']<$srcinfo['height'])){
				self::$errno=2;
				return false;
			}
			$dstcreatefunc='imagecreatefrom'.(($dstinfo['type']=='jpg')?'jpeg':$dstinfo['type']);
			if(!function_exists($dstcreatefunc)){
				self::$errno=3;
				return false;
			}
			$srccreatefunc='imagecreatefrom'.(($srcinfo['type']=='jpg')?'jpeg':$srcinfo['type']);
			if(!function_exists($srccreatefunc)){
				self::$errno=4;
				return false;
			}
			$dstimg=$dstcreatefunc($dst);//创建目标图画布资源
			$srcimg=$srccreatefunc($src);//创建水印图画布资源
		

			switch($postion){//判断位置,确定放到目标图的位置坐标
				case 0:
					$dst_x=0;
					$dst_y=0;
					break;
				case 1:
					$dst_x=$dstinfo['width']-$srcinfo['width'];
					$dst_y=0;
					break;
				case 3:
					$dst_x=0;
				    $dst_y=$dstinfo['height']-$srcinfo['height'];
					break;
				default:
					$dst_x=$dstinfo['width']-$srcinfo['width'];
					$dst_y=$dstinfo['height']-$srcinfo['height'];
			}

			if(!imagecopymerge($dstimg,$srcimg,$dst_x,$dst_y,0,0,$srcinfo['width'],$srcinfo['height'],$pct)){
				self::$errno=5;
				return false;
			}
			if(!$savename){
			   $savename=$dst;
			   unlink($dst);
			}
			$dstimgfun='image'.(($dstinfo['type']=='jpg')?'jpeg':$dstinfo['type']);
			if(!function_exists($dstimgfun)){
				self::$errno=6;
				return false;
			}
			if(!$dstimgfun($dstimg,$savename)){
				self::$errno=7;
				return false;
			}
			return true;
		}
		

		//获取图片的长,宽,类别
		static function getImgInfo($image){
			$imginfo=array();
			$img=getimagesize($image);
			$type=explode('/',$img['mime']);
			$type=end($type);
			$imginfo['width']=$img[0];
			$imginfo['height']=$img[1];
			$imginfo['type']=$type;
			return $imginfo;
		}

		/*
		string src 要缩略的图(原图)
		int width 缩略后的小图宽度
		int height 缩略后的小图高度
		string savename 缩略效果图的保存路径
		!!两边留白
		所用函数imagecopyresampled
		*/

		static function thumb($src,$savename='',$width=200,$height=200){
			if(!file_exists($src)){
			  self::$errno=8;
			  return false;
			}
			$srcinfo=self::getImgInfo($src);
			if(($srcinfo['width']<$width)&&($srcinfo['height']<$height)){//判断原图和缩略图的宽高大小
			  self::$errno=9;
			  return false;
			}

			$dst=imagecreatetruecolor($width,$height);
			$white=imagecolorallocate($dst,255,255,255);
			imagefill($dst,0,0,$white);//创建缩略图画布,以白色填充
			
			$srccreatefunc='imagecreatefrom'.(($srcinfo['type']=='jpg')?'jpeg':$srcinfo['type']);
			if(!function_exists($srccreatefunc)){
				self::$errno=3;
				return false;
			}
			$srcimg=$srccreatefunc($src);//创建原图画布

			$p=min($width/$srcinfo['width'],$height/$srcinfo['height']);//确定缩放比例
			$dst_w=$p*$srcinfo['width'];//确定原图缩略后的宽度	
			$dst_h=$p*$srcinfo['height'];//确定原图缩略后的高度
			$dst_x=($width-$dst_w)/2;//确定原图缩略后的小图放在缩略图位置的x坐标
			$dst_y=($height-$dst_h)/2;//确定原图缩略后的小图放在缩略图位置y坐标
			if(!imagecopyresampled($dst,$srcimg,$dst_x,$dst_y,0,0,$dst_w,$dst_h,$srcinfo['width'],$srcinfo['height'])){
				self::$errno=11;
				return false;
			}

			$imgfunc='image'.(($srcinfo['type']=='jpg')?'jpeg':$srcinfo['type']);
			if(!function_exists($imgfunc)){
				self::$errno=10;
				return false;
			}

			if(!$savename){
				$savename=$src;
				unlink($src);
			}
			if(!$imgfunc($dst,$savename)){
				self::$errno=12;
				return false;
			}
			return true;
		}
	
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值