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

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

[FONT-SIZE=3]
GD库相关函数的应用。
[CODE=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);
?>
[/CODE]
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 透明。

对缩略图、水印生成进行封装,代码如下:
[CODE=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);
?>
[/CODE]
[/FONT-SIZE]

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

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