1.   阿里云服务器1888元代金券领取
  2.   本网站所有源码包解压密码:www.youhutong.com
登录  帮助问答

PHP 图片处理类(图片加水印,图片加文字,图片缩略处理,获取图片信息等)

小川 技术文章
郑重声明:
  本站发布的内容仅限用于学习和研究目的.请勿用于商业或非法用途,否则后果请用户自负,下载后请24小时内删除。 本站所有内容均不能保证其完整性,不提供任何技术支持,不能接受请勿购买或下载,如需完整程序,请去其官方购买正版使用。
下载源码  
【温馨提示】源码包解压密码:www.youhutong.com

PHP 图片处理类(图片加水印,图片加文字,图片缩略处理,获取图片信息等)


源码:
<?php
header('content-type:text/html;charset=utf-8');
class Imgs
{
	/**
	 * 取得图片宽
	 * @param string $src 图片相对路径或绝对路径
	 */
	public static function get_width($src)
	{
        return imagesx($src);
    }

    /**
     * 取得图片高
     * @param string $src 图片相对路径或绝对路径
     */
    public static function get_height($src)
    {
        return imagesy($src);
    }

    /** 
	 * 图片缩放函数   
	 * @param string $src 图片相对路径或绝对路径 
	 * @param int $w 缩略图宽
	 * @param int $h 缩略图高
	 * @return array code:状态。msg:提示信息
	 **/    
	public static function thumb($src,$w=null,$h=null)     
	{   
		if(empty($src)) return array('code'=>false , 'msg'=>'请指定$src');
	    $temp = pathinfo($src);
	    #  文件名
	    $name = $temp["basename"];
	    #  文件所在的文件夹
	    $dir = $temp["dirname"];
	    #  文件扩展名
	    $extension = $temp["extension"];
	    #  缩略图保存路径,新的文件名为*.thumb.jpg
	    $savepath = "{$dir}/thumb_{$name}";
	    
	    #  获取图片的基本信息
	    $info = getimagesize($src);
	    #  获取图片宽度
	    $width = $info[0];
	    #  获取图片高度
	    $height = $info[1];
	    if(!empty($w)){
	    	$temp_w=$w;                         #  计算原图缩放后的宽度
	    	$temp_h=intval($height*($w/$width));#  计算原图缩放后的高度
	    }else{
	    	$temp_w=intval($width*($h/$height));#  计算原图缩放后的宽度
	    	$temp_h=$h;							#  计算原图缩放后的高度
	    }

	    #  创建画布
	    $temp_img=imagecreatetruecolor($temp_w,$temp_h);
	    switch ($info[2])     
	    {     
	        case 1:     
	            $im=imagecreatefromgif($src);   
	            imagecopyresampled($temp_img,$im,0,0,0,0,$temp_w,$temp_h,$width,$height); 
	            imagegif($temp_img,$savepath, 100);   
	            break;     
	        case 2:     
	            $im=imagecreatefromjpeg($src);   
	            imagecopyresampled($temp_img,$im,0,0,0,0,$temp_w,$temp_h,$width,$height);     
	    		imagejpeg($temp_img,$savepath, 100);      
	            break;     
	        case 3:     
	            $im=imagecreatefrompng($src);  
	            imagecopyresampled($temp_img,$im,0,0,0,0,$temp_w,$temp_h,$width,$height); 
	            imagepng($temp_img,$savepath, 100);    
	            break;     
	    }        
	    imagedestroy($im); 
	    return $savepath;
	} 


	/** 
	 * 图片添加水印   
	 * @param string $src  1、图片相对路径或绝对路径  2、以逗号隔开的宽高值('800,600')
	 * @param array  属性值:
	 * 					res:水印资源(1、图片相对路径或绝对路径,2、字符串)
	 *	                pos:图片水印添加的位置,取值范围:0~9
	 *							0:随机位置,在1~8之间随机选取一个位置
 	 *							1:顶部居左 2:顶部居中 
	 *							3:顶部居右 4:左边居中
	 *							5:图片中心 6:右边居中 
	 *							7:底部居左 8:底部居中 
	 *							9:底部居右
	 *					font:    字体库(相对路径或绝对路径)
	 *					fontSize:文字大小
	 *					color:   水印文字的字体颜色(255,255,255)
	 *					name:    图片保存名称
	 * @return array    code:状态、 msg:提示信息、 url:图片地址
	 **/
	public static function setWater($src, $arr=array())
	{	
		if(empty($src)) return array('code'=>false , 'msg'=>'请指定$src');
		$def = array(
			'res'       => '小川编程',
			'pos'       => 7,
			'font'      => './1.ttf',
			'fontSize'  => 24,
			'color'     => '255,255,255',
			'name'      => null
		);
		$def = array_merge($def,$arr);
		/**
			判断$src是不是图片,不是就创建画布
		*/
		if(!file_exists($src)){
			if(empty($def['name'])) return array('code'=>false , 'msg'=>'请指定图片名称');
			# 计算画布宽高
			$obj = explode(',', $src);
			if(count($obj)!=2) return array('code'=>false , 
				'msg'=>'请给正确的宽高,或你给的不是一个有效的地址!');
			$srcImg_w = is_numeric($obj[0]) ? $obj[0] : 400 ;
			$srcImg_h = is_numeric($obj[1]) ? $obj[1] : 300 ;
			# 创建画布
			$dst_img = @imagecreatetruecolor($srcImg_w,$srcImg_h);
		}else{
			#  获取图片信息
			$srcInfo = @getimagesize($src);
			$srcImg_w = $srcInfo[0];
			$srcImg_h = $srcInfo[1];
			if(empty($def['name'])) $def['name'] = $src;
			#  动态的把图片导入内存中
			switch ($srcInfo[2]){ 
				case 1: 
					$dst_img = imagecreatefromgif($src); 
				break; 

				case 2: 
					$dst_img = imagecreatefromjpeg($src); 
				break; 

				case 3: 
					$dst_img = imagecreatefrompng($src); 
				break; 

				default: 
					return array('code'=>false , 'msg'=>'目标图片类型错误');
				exit; 
			}
		}
		/**
			计算出水印宽高
		*/
		if(!file_exists($def['res'])){
			if(!file_exists($def['font']))
				return array('code'=>false , 'msg'=>'字体库不存在');
			$box = @imagettfbbox($def['fontSize'], 0, $def['font'], $def['res']);
			$logow = max($box[2], $box[4]) - min($box[0], $box[6]);
			$logoh = max($box[1], $box[3]) - min($box[5], $box[7]);	
		}else{
			$resInfo = @getimagesize($def['res']);
			$res_w = $resInfo[0];
			$res_h = $resInfo[1];
			if($srcImg_w < $res_w || $srcImg_h < $res_h)
				return array('code'=>false , 'msg'=>'水印图片过大');
			#  动态的把图片导入内存中
			switch ($resInfo[2]){ 
				case 1: 
					$markim = imagecreatefromgif($def['res']); 
				break; 

				case 2: 
					$markim = imagecreatefromjpeg($def['res']); 
				break; 

				case 3: 
					$markim = imagecreatefrompng($def['res']); 
				break; 

				default: 
					return array('code'=>false , 'msg'=>'水印图片类型错误');
				exit; 
			}
			$logow = $res_w;
			$logoh = $res_h;
		}
		/**
			计算水印显示位置
		*/
		if($def['pos'] == 0) $def['pos'] = rand(1, 9);
		switch($def['pos'])
		{
			case 1:
				$x = +10;
				$y = +10+$def['fontSize'];
			break;

			case 2:
				$x = ($srcImg_w - $logow) / 2;
				$y = +10+$def['fontSize'];
			break;

			case 3:
				$x = $srcImg_w - $logow - 10;
				$y = +10+$def['fontSize'];
			break;

			case 4:
				$x = +10;
				$y = ($srcImg_h - $logoh) / 2 + $def['fontSize'];
			break;

			case 5:
				$x = ($srcImg_w - $logow) / 2;
				$y = ($srcImg_h - $logoh) / 2 + $def['fontSize'];
			break;

			case 6:
				$x = $srcImg_w - $logow - 10;
				$y = ($srcImg_h - $logoh) / 2 + $def['fontSize'];
			break;

			case 7:
				$x = +10;
				$y = $srcImg_h - $logoh + $def['fontSize'] - 10;
			break;

			case 8:
				$x = ($srcImg_w - $logow) / 2;
				$y = $srcImg_h - $logoh + $def['fontSize'] - 10;
			break;

			case 9:
				$x = $srcImg_w - $logow - 10;
				$y = $srcImg_h - $logoh + $def['fontSize'] - 10;
			break;

			default: 
				return array('code'=>false , 'msg'=>'水印位置不支持');
			exit;
		}
		/**
			把图片水印或文字水印,加到目标图片中
		*/
		if(file_exists($def['res'])){
			imagecopy($dst_img, $markim, $x, $y, 0, 0, $logow, $logoh);
			imagedestroy($markim);
		}else{
			$rgb = explode(',', $def['color']);
			if(count($rgb)!=3) return array('code'=>false , 'msg'=>'请给正确的字体颜色');
			if(!is_numeric($rgb[0]) || !is_numeric($rgb[1]) || !is_numeric($rgb[2])) 
				return array('code'=>false , 'msg'=>'请给正确的字体颜色');
			if($rgb[0]>255 || $rgb[1]>255 || $rgb[2]>255) 
				return array('code'=>false , 'msg'=>'请给正确的字体颜色');
			$def['color'] = imagecolorallocate($dst_img, $rgb[0], $rgb[1], $rgb[2]);
			imagettftext($dst_img, $def['fontSize'], 0, $x, 
				$y, $def['color'], $def['font'],$def['res']);
		}
		/**
			保存处理过的图片(有水印了的图片)
		*/
		$name = explode('.', $def['name']);
		switch (strtolower($name[2])) {
			case 'jpeg':
					imagejpeg($dst_img, $def['name']);
				break;
			case 'jpg':
					imagejpeg($dst_img, $def['name']);
				break;
			case 'png':
					imagepng($dst_img, $def['name']);
				break;
			case 'gif':
					imagegif($dst_img, $def['name']);
				break;
			default:
					return array('code'=>false , 'msg'=>'保存图片类型有误');
				break;
		}
		#  销毁图片内存资源
		imagedestroy($dst_img);
		return array('code'=>true , 'msg'=>'添加水印成功', 'url'=>$def['name']);
	}
}







/*
	创建一个800*600的图再加logo.jpg图片作为水印.
	1、另存为new_thumb.jpeg
	2、水印在中间显示
*/
#  参数:
$arr = [
	#  水印图片路径(如果不存在将会被当成是字符串水印)
	'res'  => './logo.jpg',
	#  水印显示位置
	'pos'  => 5,
	#  不指定name(会覆盖原图,也就是保存成thumb.jpeg)
	'name' => './800x600.jpeg',  
];
$res = Imgs::setWater('800,600', $arr);
print_r($res);



/*
	给图片thumb.jpeg加:小川编程,作为水印
	1、另存为new_thumb.jpeg
	2、水印顶部居右显示
	3、字体大小为:30
*/
#  参数:
$arr = [
	#  水印图片路径(如果不存在将会被当成是字符串水印)
	'res'  => '小川编程',
	#  水印显示位置
	'pos'  => 3,
	#  不指定name(会覆盖原图,也就是保存成thumb.jpeg)
	'name' => './new1.jpg',  
	#  字体大小
	'fontSize'=>30,
	#  字体颜色
	'color'=>'255,255,0',
];	
$res = Imgs::setWater('./1.jpg', $arr);
print_r($res);

?>


 浏览器启用弹出窗口过滤功能,将无法跳转到下载页。在浏览器地址栏右边符号提示处点击允许就可以了!
下载源码  
【温馨提示】源码包解压密码:www.youhutong.com

转载请注明来源地址:小川编程 » https://www.youhutong.com/index.php/article/index/165.html


  1、本站发布的内容仅限用于学习和研究目的.请勿用于商业或非法用途,下载后请24小时内删除。
  2、本站所有内容均不能保证其完整性,不能接受请勿购买或下载,如需完整程序,请去其官方购买正版使用
  3、本站联系方式Email:admin@youhutong.com ,收到邮件会第一时间处理。
  4、如侵犯到任何版权问题,请立即告知本站(立即在线告知),本站将及时删除并致以最深的歉意
( 0 )个小伙伴在吐槽
    登录帐号  如果已经登录请刷新! 发表我的评论
    表情