<?php
/*
图片处理 
缩略图及打水印
说明 字体请自己去下载放在此目录  并更改 $font="./迷你简美黑.ttf"
*/
/*
测试

$img=new image();
$image->yzm(50,25,4);//生成验证码 对应参数：宽 高 字符串长度
$img->makethumb("2.png","1.png",100,100);//缩略图
$img->addwater("1.png",9,"2.png");//图片水印
$img->addwater("1.png",9,"",$str="测试一下",$size=16,$font="./迷你简美黑.ttf",$color="#FF6000");//文字水印
*/
class image{

function __construct(){
	
}
/**
缩略图函数
*/
function makethumb($dstimg,$img,$dstw,$dsth)
{
	if(!file_exists($img))
	{
		return false;
	}
	
	list($width,$height) = getimagesize($img);
	
	if($width>$height)
	{
	$percent=$dstw/$width;
	}else
	{
	$percent=$dsth/$height;
	}
	$new_width = intval($width * $percent);
	$new_height = intval( $height * $percent);
	
	$im = imagecreatetruecolor($new_width, $new_height);
	$imgtype=$this->getimgtype($img);
	
	$image = @$this->imagecreatefrom($img,$imgtype);
	@imagecopyresampled($im, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
	
	@$this->imagesave($im, $dstimg,$imgtype);

}


/**
增加水印
*/
function addwater($dstimg,$warterpos=9,$img='',$str="测试一下",$size=16,$font="./迷你简美黑.ttf",$color="#FF6000")
{
	if(!file_exists($dstimg))
	{
		return false;
	}
	$str=iconv("GB2312","utf-8",$str);
	
	list($dw,$dh)=getimagesize($dstimg);	
	$dsttype=$this->getimgtype($dstimg);
	$dstim=$this->imagecreatefrom($dstimg,$dsttype);
	if(!empty($img))
	{
	//水印图片
	list($w,$h)=getimagesize($img);
	$imgtype=$this->getimgtype($img);
	$im=$this->imagecreatefrom($img,$imgtype);	
	}else
	{
		$temp=@imagettfbbox($size,0,$font,$str);
		
		$w=$temp[2]-$temp[6];
		$h=$temp[3]-$temp[7];
				
	}
	if(($dw<$w) || ($dh<$h))
	{				
		return false;
	}
	switch($warterpos)
	{
		case 0://随机
			$posX=rand(0,($dw-$w));
			$posY=rand(0,($dh-$h));	
			break;
		case 1://左上
			if($img)
			{
			$posX=0;
			$posY=0;
			}else
			{
			$posX=0;
			$posY=$h;
			}
			
			break;
		case 2://中上
			if($img)
			{
			$posX=($dw-$w)/2;
			$posY=0;
			}else
			{
			$posX=($dw-$w)/2;
			$posY=$h;
			}
			break;
		case 3://右上
			if($img)
			{
			$posX=$dw-$w;
			$posY=0;
			}else
			{
			$posX=$dw-$w;
			$posY=$h;
				
			}
			break;
		case 4://左中
			$posX=0;
			$posY=($dh-$h)/2;
			break;
		case 5://中中
			$posX=($dw-$w)/2;
			$posY=($dh-$h)/2;
			break;
		case 6://右中
			$posX=$dw-$w;
			$posY=($dh-$h)/2;
			break;
		case 7://左下
			$posX=0;
			$posY=$dh-$h;
			break;
		case 8://中下
			$posX=($dw-$w)/2;
			$posY=$dh-$h;
			break;
		case 9://右下
			$posX=$dw-$w;
			$posY=$dh-$h;
			break;
		default://随机
			$posX=rand(0,($dw-$w));
			$posY=rand(0,($dh-$h));	
			break;		
	}
	imagealphablending($dstim,true);
	if(!empty($img))
	{
		//处理图片水印
		imagecopy($dstim,$im,$posX,$posY,0,0,$w,$h);
	}else
	{
		//处理文字水印
		if(!empty($color) && (strlen($color)==7))
		{
			$R=hexdec(substr($color,1,2));
			$G=hexdec(substr($color,3,2));
			$B=hexdec(substr($color,5));
		}else
		{
			$R=$G=$B="00";
		}
		$grey=imagecolorallocate($dstim,$R,$G,$B);
		@imagettftext($dstim,$size,0,$posX,$posY,$grey,$font,$str);
		
		
		
	}
	$this->imagesave($dstim,$dstimg,$dsttype);
	
}

//获取图片后缀
function getimgtype($img)
{
	$arr=explode(".",$img);
	return $arr[count($arr)-1];
}


//输出图像
function imagesave($im,$dstimg='',$imgtype='jpeg')
{
	switch($imgtype)
	{
		case "gif":
				@imagegif($im,$dstimg);
				break;	
		case "jpg":
				@imagejpeg($im,$dstimg);
				break;
		case "png":
				@imagepng($im,$dstimg);
				break;
		
				
				
	}
}

function imagecreatefrom($img,$imgtype)
{
	switch($imgtype)
	{
		case 'gif':
		return @imagecreatefromgif($img);
		break;
		case "jpg":
		return @imagecreatefromjpeg($img);
		break;
		case "png":
		return @imagecreatefrompng($img);
		break;
	}
}
//随机生成指定长度的字符串
function random($len)
{
	$srcstr="ABCDEFGHJKLMNPQRSTUVWXYZ23456789abhjklmnpqrstuvwxyzcdefg";
	mt_srand();//配置乱数种子
	$strs="";
	$slen=strlen($srcstr)-1;
	for($i=0;$i <$len;$i++){
	$strs.=$srcstr[mt_rand(0,$slen)];
	}
	
	return $strs;
}
//生成验证图片
function yzm($width=50,$height=25,$len=4)
{
	session_start();
	$str=$this->random(4); //随机生成的字符串
	$width = 50; //验证码图片的宽度
	$height = 25; //验证码图片的高度
	
	@header("Content-Type:image/png");
	$_SESSION["ss_yzm"] = $str;
	//echo $str;
	$im=imagecreate($width,$height);
	//背景色
	$back=imagecolorallocate($im,0xFF,0xFF,0xFF);
	//模糊点颜色
	$pix=imagecolorallocate($im,187,230,247);
	//字体色
	$font=imagecolorallocate($im,41,163,238);
	//绘模糊作用的点
	mt_srand();
	for($i=0;$i <1000;$i++)
	{
	imagesetpixel($im,mt_rand(0,$width),mt_rand(0,$height),$pix);
	}
	imagestring($im, 5, 7, 5,$str, $font);
	imagerectangle($im,0,0,$width-1,$height-1,$font);
	imagepng($im);
	imagedestroy($im);
}


}

?>