发个自己常用的加水印的函数和缩略图的函数
时间:2009-12-22
来源:互联网
本帖最后由 dongxin1390008 于 2009-12-22 10:40 编辑
缩略图的函数之前发过,但是发现代码冗余太多了,后才重新编写了,更好用,缩略图函数支持等比缩放,对于缩放之后宽度和高度不足的问题,自动补上背景。废话不多说
缩略图的函数之前发过,但是发现代码冗余太多了,后才重新编写了,更好用,缩略图函数支持等比缩放,对于缩放之后宽度和高度不足的问题,自动补上背景。废话不多说
/** * 为图片加水印 * @param string $desImg 目标图片 参数格式为 ./images/pic.jpg * @param string $waterImg 水印图片 参数格式同上,水印图片为 png格式,背景透明 * @param int positon 水印位置 1:顶部居左 2:顶部居右 3:居中 4 :底部居左 5:底部居右 * @param bool $saveas 是否另存为,默认值false,表示覆盖原图 * @param int $alpha 水印图片的不透明度 * @return string $savepath 新图片的路径 * **/ function watermark($desImg,$waterImg,$positon=1,$saveas=false,$alpha=30) { //获取目图片的基本信息 $temp=pathinfo($desImg); $name=$temp["basename"];//文件名 $path=$temp["dirname"];//文件所在的文件夹 $extension=$temp["extension"];//文件扩展名 if($saveas) { //需要另存为 $name=rtrim($name,".$extension")."_2.";//重新命名 $savepath=$path."/".$name.$extension; } else { //不需要另存为则覆盖原图 $savepath=$path."/".$name; } $info=getImageInfo($desImg);//获取目标图片的信息 $info2=getImageInfo($waterImg);//获取水印图片的信息 $desImg=create($desImg);//从原图创建 $waterImg=create($waterImg);//从水印图片创建 //位置1:顶部居左 if($positon==1) { $x=0; $y=0; } //位置2:顶部居右 if($positon==2) { $x=$info[0]-$info2[0]; $y=0; } //位置3:居中 if($positon==3) { $x=($info[0]-$info2[0])/2; $y=($info[1]-$info2[1])/2; } //位置4:底部居左 if($positon==4) { $x=0; $y=$info[1]-$info2[1]; } //位置5:底部居右 if($positon==5) { $x=$info[0]-$info2[0]; $y=$info[1]-$info2[1]; } imagecopymerge($desImg,$waterImg,$x,$y,0,0,$info2[0],$info2[1],$alpha); imagejpeg($desImg,$savepath); imagedestroy($desImg); imagedestroy($waterImg); return $savepath; } /** * 获取图片的信息,width,height,image/type * @param string $src 图片路径 * @return 数组 * **/ function getImageInfo($src) { return getimagesize($src); } /** * 创建图片,返回资源类型 * @param string $src 图片路径 * @return resource $im 返回资源类型 * **/ function create($src) { $info=getImageInfo($src); switch ($info[2]) { case 1: $im=imagecreatefromgif($src); break; case 2: $im=imagecreatefromjpeg($src); break; case 3: $im=imagecreatefrompng($src); break; } return $im; } /** * 缩略图主函数 * @param string $src 图片路径 * @param int $w 缩略图宽度 * @param int $h 缩略图高度 * @return mixed 返回缩略图路径 * **/ function resize($src,$w,$h) { $temp=pathinfo($src); $name=$temp["basename"];//文件名 $dir=$temp["dirname"];//文件所在的文件夹 $extension=$temp["extension"];//文件扩展名 $savepath="{$dir}/{$name}.thumb.jpg";//缩略图保存路径,新的文件名为*.thumb.jpg //获取图片的基本信息 $info=getImageInfo($src); $width=$info[0];//获取图片宽度 $height=$info[1];//获取图片高度 $per1=round($width/$height,2);//计算原图长宽比 $per2=round($w/$h,2);//计算缩略图长宽比 //计算缩放比例 if($per1>$per2||$per1==$per2) { //原图长宽比大于或者等于缩略图长宽比,则按照宽度优先 $per=$w/$width; } if($per1<$per2) { //原图长宽比小于缩略图长宽比,则按照高度优先 $per=$h/$height; } $temp_w=intval($width*$per);//计算原图缩放后的宽度 $temp_h=intval($height*$per);//计算原图缩放后的高度 $temp_img=imagecreatetruecolor($temp_w,$temp_h);//创建画布 $im=create($src); imagecopyresampled($temp_img,$im,0,0,0,0,$temp_w,$temp_h,$width,$height); if($per1>$per2) { imagejpeg($temp_img,$savepath); return addBg($savepath,$w,$h,"w"); //宽度优先,在缩放之后高度不足的情况下补上背景 } if($per1==$per2) { imagejpeg($temp_img,$savepath); return $savepath; //等比缩放 } if($per1<$per2) { imagejpeg($temp_img,$savepath); return addBg($savepath,$w,$h,"h"); //高度优先,在缩放之后宽度不足的情况下补上背景 } } /** * 添加背景 * @param string $src 图片路径 * @param int $w 背景图像宽度 * @param int $h 背景图像高度 * @param String $first 决定图像最终位置的,w 宽度优先 h 高度优先 wh:等比 * @return 返回加上背景的图片 * **/ function addBg($src,$w,$h,$fisrt="w") { $bg=imagecreatetruecolor($w,$h); $white = imagecolorallocate($bg,255,255,255); imagefill($bg,0,0,$white);//填充背景 //获取目标图片信息 $info=getImageInfo($src); $width=$info[0];//目标图片宽度 $height=$info[1];//目标图片高度 $img=create($src); if($fisrt=="wh") { //等比缩放 return $src; } else { if($fisrt=="w") { $x=0; $y=($h-$height)/2;//垂直居中 } if($fisrt=="h") { $x=($w-$width)/2;//水平居中 $y=0; } imagecopymerge($bg,$img,$x,$y,0,0,$width,$height,100); imagejpeg($bg,$src); imagedestroy($bg); imagedestroy($img); return $src; } }
作者: dongxin1390008 发布时间: 2009-12-22
这个代码格式不知道为什么不能保证原来的代码的缩进格式
作者: dongxin1390008 发布时间: 2009-12-22
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28