php中缩略图和水印的简单实现

Eddy 发布于2012-12-13 15:48:40 分类: 网站相关 已浏览loading 网友评论0条 我要评论


GD库相关函数的应用。

<?php
//实现缩略图、水印
$file = 'a.jpg';
$shuiyin = 'shuiyin.jpg';
$percent = 0.5;

list($w,$h)=getimagesize($file);
$newh = $h * $percent;
$neww = $w * $percent;

$src = imagecreatefromjpeg($file);
$dst = imagecreatetruecolor($neww, $newh);
$shuiyin = imagecreatefromjpeg($shuiyin);

//两种方式:区别在于是否重新采样,推荐imagecopyresampled
//imagecopyresized($dst, $src, 0, 0, 0, 0, $neww, $newh, $w, $h);
imagecopyresampled($dst, $src, 0, 0, 0, 0, $neww, $newh, $w, $h);

//水印
imagecopymerge($src, $shuiyin, 100, 100, 0, 0, 207, 144, 30);

header("Content-type: image/jpeg");
//缩略图
//imagejpeg($dst);
//水印
imagejpeg($src);

imagedestroy($src);
imagedestroy($dst);
imagedestroy($shuiyin);
?>
bool imagecopyresized ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )
imagecopyresized() 将一幅图像中的一块正方形区域拷贝到另一个图像中。dst_image 和 src_image 分别是目标图像和源图像的标识符。如果源和目标的宽度和高度不同,则会进行相应的图像收缩和拉伸。坐标指的是左上角。本函数可用来在同一幅图内部拷贝(如果 dst_image 和 src_image 相同的话)区域,但如果区域交迭的话则结果不可预知。

bool imagecopymerge ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h , int $pct )
将 src_im 图像中坐标从 src_x,src_y 开始,宽度为 src_w,高度为 src_h 的一部分拷贝到 dst_im 图像中坐标为 dst_x 和 dst_y 的位置上。两图像将根据 pct 来决定合并程度,其值范围从 0 到 100。当 pct = 0 时,实际上什么也没做,当为 100 时对于调色板图像本函数和 imagecopy() 完全一样,它对真彩色图像实现了 alpha 透明。

对缩略图、水印生成进行封装,代码如下:

<?php
class imageTool {
	/*
	*获取图片信息 宽度、高度、扩展名
	*返回数组
	*/
	protected static function getImgInfo($file){
		if(!file_exists($file)){
			return false;
		}
		
		$imgArray = getimagesize($file);
		$imgInfo['width']=$imgArray[0];
		$imgInfo['height']=$imgArray[1];
		$imgInfo['extension']=end(explode('/',$imgArray['mime']));
		
		return $imgInfo;
	}
	/*
	*生成图片水印 src:源图片 water:水印图片 save:生成图片 pos:水印位置 slpha:水印透明度
	*返回bool
	*/
	public static function createImgWater($src,$water,$save,$pos=3,$alpha=50){
		if(!file_exists($src) || !file_exists($water)){
			return false;
		}

		$srcImgInfo = self::getImgInfo($src);
		$waterImgInfo = self::getImgInfo($water);
		if ($waterImgInfo['width']>$srcImgInfo['width'] || $waterImgInfo['height']>$srcImgInfo['height']) {
			return false;
		}

		$srcfun = 'imagecreatefrom'.$srcImgInfo['extension'];
		$waterfun = 'imagecreatefrom'.$waterImgInfo['extension'];	
		$src_im = $srcfun($src);
		$water_im = $waterfun($water);

		switch ($pos){
			case 0:
				$src_x=0;
				$src_y=0;
				break;
			case 1:
				$src_x=$srcImgInfo['width']-$waterImgInfo['width'];
				$src_y=0;
				break;
			case 2:
				$src_x=0;
				$src_y=$srcImgInfo['height']-$waterImgInfo['height'];
				break;
			default:
				$src_x=$srcImgInfo['width']-$waterImgInfo['width'];
				$src_y=$srcImgInfo['height']-$waterImgInfo['height'];
		}
		
		imagecopymerge($src_im, $water_im, $src_x, $src_y, 0, 0, 
			$waterImgInfo['width'], $waterImgInfo['height'], $alpha);
		$imgfunc = 'image' . $srcImgInfo['extension'];
		return $imgfunc($src_im,$save);
	}
	/*
	*生成图片缩略图
	*返回bool src:源图片 thumb:缩略图 width:缩略图宽 height:缩略图高
	*/
	public static function createThumbnail($src,$thumb,$width,$height){
		if(!file_exists($src)){
			return false;
		}

		$srcImgInfo = self::getImgInfo($src);
		if ($width>=$srcImgInfo['width'] || $height>=$srcImgInfo['height']) {
			return false;
		}

		$srcfun = 'imagecreatefrom'.$srcImgInfo['extension'];
		$src_im = $srcfun($src);
		$dst_im = imagecreatetruecolor($width, $height);
		$background = imagecolorallocate($dst_im, 200, 200, 200);
		imagefill($dst_im, 0, 0, $background);

		$factor = min($width/$srcImgInfo['width'],$height/$srcImgInfo['height']);
		imagecopyresampled($dst_im, $src_im, ($width-$srcImgInfo['width']*$factor)/2, ($height-$srcImgInfo['height']*$factor)/2, 0, 0, 
			$srcImgInfo['width']*$factor, $srcImgInfo['height']*$factor, $srcImgInfo['width'], $srcImgInfo['height']);
		$imgfunc = 'image' . $srcImgInfo['extension'];
		return $imgfunc($dst_im,$thumb);
	}
}

//调用示例
imageTool::createImgWater('./a.jpg','./shuiyin.jpg','srcshuiyin3.jpg',3);
imageTool::createThumbnail('./a.jpg','./suoa.jpg',800,500);
?>

已经有(0)位网友发表了评论,你也评一评吧!
原创文章如转载,请注明:转载自Eddy Blog
原文地址:http://www.rrgod.com/webdesign/861.html     欢迎订阅Eddy Blog

记住我的信息,下次不用再输入 欢迎给Eddy Blog留言