帝国CMS缩略图函数改进(GD库改进)
本文关键字词:缩略图,缩略图函数,帝国CMS,帝国CMS,帝国CMS缩略图去黑边框
第一种方式 帝国默认:
sys_ResizeImg($r[titlepic],宽,高,0);//帝国默认的不裁剪缩放生成缩略图的方式
第二种方式 帝国默认:
sys_ResizeImg($r[titlepic],宽,高,1);//帝国默认的裁剪缩放生成缩略图的方式
第三种方式 去掉裁剪不够时的黑边并且从图片缩放后中间裁剪:
sys_ResizeImg($r[titlepic],宽,高,2);//新加去黑边裁剪生成缩略图的方式
第四种方式 只固定图片的宽,高度不限制(类似不规则瀑布流的图片形式),高填写为大于0的任意整数数字:
sys_ResizeImg($r[titlepic],宽,高,3);//新加去黑边生成类似瀑布流格式的方式
前台调用方式如下<?=sys_ResizeImg($r[titlepic],宽,高,3) ?>
/e/class/gd.php 函数全部代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?phpdefine( 'InEmpireCMSGd' ,TRUE); //原文件,新文件,宽度,高度,维持比例functionResizeImage($big_image_name,$new_name,$max_width= 400 ,$max_height= 400 ,$resize= 1 ){$returnr[ 'file' ]= '' ;$returnr[ 'filetype' ]= '' ;if($temp_img_type=@getimagesize($big_image_name)){preg_match( '/\/([a-z]+)$/i' ,$temp_img_type[mime],$tpn);$img_type=$tpn[ 1 ];}else{preg_match( '/\.([a-z]+)$/i' ,$big_image_name,$tpn);$img_type=$tpn[ 1 ];}$all_type=array( "jpg" =>array( "create" => "ImageCreateFromjpeg" , "output" => "imagejpeg" , "exn" => ".jpg" ), "gif" =>array( "create" => "ImageCreateFromGIF" , "output" => "imagegif" , "exn" => ".gif" ), "jpeg" =>array( "create" => "ImageCreateFromjpeg" , "output" => "imagejpeg" , "exn" => ".jpg" ), "png" =>array( "create" => "imagecreatefrompng" , "output" => "imagepng" , "exn" => ".png" ), "wbmp" =>array( "create" => "imagecreatefromwbmp" , "output" => "image2wbmp" , "exn" => ".wbmp" )); $func_create=$all_type[$img_type][ 'create' ];if(empty($func_create)or!function_exists($func_create)){return$returnr;}//输出$func_output=$all_type[$img_type][ 'output' ];$func_exname=$all_type[$img_type][ 'exn' ];if(($func_exname== '.gif' ||$func_exname== '.png' || $func_exname== '.wbmp' )&&!function_exists($func_output)){$func_output= 'imagejpeg' ;$func_exname= '.jpg' ;}$big_image=$func_create($big_image_name);$big_width=imagesx($big_image);$big_height=imagesy($big_image);if($big_width<=$max_widthand$big_height<=$max_height){$func_output($big_image,$new_name.$func_exname);$returnr[ 'file' ]=$new_name.$func_exname;$returnr[ 'filetype' ]=$func_exname;return$returnr;}$ratiow=$max_width/$big_width;$ratioh=$max_height/$big_height;$new_width=($ratiow> 1 )?$big_width:$max_width;$new_height=($ratioh> 1 )?$big_height:$max_height;if($resize== 1 ){if($big_width>=$max_widthand$big_height>=$max_height){if($big_width>$big_height){$tempx=$max_width/$ratioh;$tempy=$big_height;$srcX=($big_width-$tempx)/ 2 ;$srcY= 0 ;}else{$tempy=$max_height/$ratiow;$tempx=$big_width;$srcY=($big_height-$tempy)/ 2 ;$srcX= 0 ;}}else{if($big_width>$big_height){$tempx=$max_width;$tempy=$big_height;$srcX=($big_width-$tempx)/ 2 ;$srcY= 0 ;}else{$tempy=$max_height;$tempx=$big_width;$srcY=($big_height-$tempy)/ 2 ;$srcX= 0 ;}}}elseif($resize== 2 ){//同比例缩放超出裁切 if($big_width>=$max_widthand$big_height>=$max_height){if($max_width>=($big_width*$ratioh)){$tempx=$big_width;$tempy=$max_height/$ratiow;$srcX= 0 ;$srcY=($big_height-$tempy)/ 2 ;}elseif($max_height>=($big_height*$ratiow)){$tempx=$max_width/$ratioh;$tempy=$big_height;$srcX=($big_width-$tempx)/ 2 ;$srcY= 0 ;}else{$tempx=$max_width;$tempy=$big_height;$srcX=($big_width-$tempx)/ 2 ;$srcY= 0 ;}}else{if($max_height>=$big_height){$tempx=$max_width;$tempy=$big_height;$srcX=($big_width-$max_width)/ 2 ;$srcY= 0 ;}elseif($max_width>=$big_width){$tempx=$big_width;$tempy=$max_height;$srcX= 0 ;$srcY=($big_height-$max_height)/ 2 ;}}}elseif($resize== 3 ){//宽度固定高度同比例任意$srcX= 0 ;$srcY= 0 ;$tempx=$big_width;$tempy=$big_height;if($big_width>=$max_width){$new_height=$big_height*$ratiow;}else{$new_height=$big_height;}}else{//不保持比例$srcX= 0 ;$srcY= 0 ;$tempx=$big_width;$tempy=$big_height;}if(function_exists( "imagecopyresampled" )){$temp_image=imagecreatetruecolor($new_width,$new_height);//echo$tempx;exit;imagecopyresampled($temp_image,$big_image, 0 , 0 ,$srcX,$srcY,$new_width,$new_height,$tempx,$tempy);}else{$temp_image=imagecreate($new_width,$new_height);imagecopyresized($temp_image,$big_image, 0 , 0 ,$srcX,$srcY,$new_width,$new_height,$tempx,$tempy);} /*增加高质量输出图像*/ $zhiliang=$func_exname== '.png' ? 9: 100 ;$func_output($temp_image,$new_name.$func_exname,$zhiliang);//$func_output($temp_image,$new_name.$func_exname);ImageDestroy($big_image);ImageDestroy($temp_image);$returnr[ 'file' ]=$new_name.$func_exname;$returnr[ 'filetype' ]=$func_exname;return$returnr;} /**功能:图片加水印(水印支持图片或文字)*参数:*$groundImage背景图片,即需要加水印的图片,暂只支持GIF,JPG,PNG格式;*$waterPos水印位置,有10种状态,0为随机位置;*1为顶端居左,2为顶端居中,3为顶端居右;*4为中部居左,5为中部居中,6为中部居右;*7为底端居左,8为底端居中,9为底端居右;*$waterImage图片水印,即作为水印的图片,暂只支持GIF,JPG,PNG格式;*$waterText文字水印,即把文字作为为水印,支持ASCII码,不支持中文;*$textFont文字大小,值为1、2、3、4或5,默认为5;*$textColor文字颜色,值为十六进制颜色值,默认为#FF0000(红色);**注意:SupportGD2.0,SupportFreeType、GIFRead、GIFCreate、JPG、PNG*$waterImage和$waterText最好不要同时使用,选其中之一即可,优先使用$waterImage。*当$waterImage有效时,参数$waterString、$stringFont、$stringColor均不生效。*加水印后的图片的文件名和$groundImage一样。*/ functionimageWaterMark($groundImage,$waterPos= 0 ,$waterImage= "" ,$waterText= "" ,$textFont= 5 ,$textColor= "#FF0000" ,$myfontpath= "../data/mask/cour.ttf" ,$w_pct,$w_quality){global$fun_r,$editor;if($editor== 1 ){$a= '../' ;}elseif($editor== 2 ){$a= '../../' ;}elseif($editor== 3 ){$a= '../../../' ;}else{$a= '' ;}$waterImage=$waterImage?$a.$waterImage: '' ;$myfontpath=$myfontpath?$a.$myfontpath: '' ;$isWaterImage=FALSE;$formatMsg=$fun_r[ 'synotdotype' ]; //读取水印文件if(!empty($waterImage)&&file_exists($waterImage)){$isWaterImage=TRUE;$water_info=getimagesize($waterImage);$water_w=$water_info[ 0 ];//取得水印图片的宽$water_h=$water_info[ 1 ];//取得水印图片的高 switch($water_info[ 2 ]){//取得水印图片的格式case 1: $water_im=imagecreatefromgif($waterImage);break;case 2: $water_im=imagecreatefromjpeg($waterImage);break;case 3: $water_im=imagecreatefrompng($waterImage);break;default:echo$formatMsg;return "" ;}} //读取背景图片if(!empty($groundImage)&&file_exists($groundImage)){$ground_info=getimagesize($groundImage);$ground_w=$ground_info[ 0 ];//取得背景图片的宽$ground_h=$ground_info[ 1 ];//取得背景图片的高 switch($ground_info[ 2 ]){//取得背景图片的格式case 1: $ground_im=imagecreatefromgif($groundImage);break;case 2: $ground_im=imagecreatefromjpeg($groundImage);break;case 3: $ground_im=imagecreatefrompng($groundImage);break;default:echo$formatMsg;return "" ;}}else{echo$fun_r[ 'synotdoimg' ];return "" ;} //水印位置if($isWaterImage){//图片水印$w=$water_w;$h=$water_h;$label= "图片的" ;}else{//文字水印$temp=imagettfbbox(ceil($textFont* 2.5 ), 0 ,$myfontpath,$waterText);//取得使用TrueType字体的文本的范围$w=$temp[ 2 ]-$temp[ 6 ];$h=$temp[ 3 ]-$temp[ 7 ];unset($temp);$label= "文字区域" ;}if(($ground_w<$w)||($ground_h<$h)){echo$fun_r[ 'sytoosmall' ];return '' ;}switch($waterPos){case 0: //随机$posX=rand( 0 ,($ground_w-$w));$posY=rand( 0 ,($ground_h-$h));break;case 1: // 1 为顶端居左$posX= 0 ;$posY= 0 ;break;case 2: // 2 为顶端居中$posX=($ground_w-$w)/ 2 ;$posY= 0 ;break;case 3: // 3 为顶端居右$posX=$ground_w-$w;$posY= 0 ;break;case 4: // 4 为中部居左$posX= 0 ;$posY=($ground_h-$h)/ 2 ;break;case 5: // 5 为中部居中$posX=($ground_w-$w)/ 2 ;$posY=($ground_h-$h)/ 2 ;break;case 6: // 6 为中部居右$posX=$ground_w-$w;$posY=($ground_h-$h)/ 2 ;break;case 7: // 7 为底端居左$posX= 0 ;$posY=$ground_h-$h;break;case 8: // 8 为底端居中$posX=($ground_w-$w)/ 2 ;$posY=$ground_h-$h;break;case 9: // 9 为底端居右$posX=$ground_w-$w;$posY=$ground_h-$h;break;default://随机$posX=rand( 0 ,($ground_w-$w));$posY=rand( 0 ,($ground_h-$h));break;} //设定图像的混色模式imagealphablending($ground_im,true); if($isWaterImage){//图片水印if($water_info[ 2 ]== 3 ){imagecopy($ground_im,$water_im,$posX,$posY, 0 , 0 ,$water_w,$water_h);//拷贝水印到目标文件}else{imagecopymerge($ground_im,$water_im,$posX,$posY, 0 , 0 ,$water_w,$water_h,$w_pct);//拷贝水印到目标文件}}else{//文字水印if(!empty($textColor)&&(strlen($textColor)== 7 )){$R=hexdec(substr($textColor, 1 , 2 ));$G=hexdec(substr($textColor, 3 , 2 ));$B=hexdec(substr($textColor, 5 ));}else{echo$fun_r[ 'synotfontcolor' ];return "" ;}imagestring($ground_im,$textFont,$posX,$posY,$waterText,imagecolorallocate($ground_im,$R,$G,$B));} //生成水印后的图片@unlink($groundImage);switch($ground_info[ 2 ]){//取得背景图片的格式case 1: imagegif($ground_im,$groundImage);break;case 2: imagejpeg($ground_im,$groundImage,$w_quality);break;case 3: imagepng($ground_im,$groundImage);break;default:echo$formatMsg;return "" ;} //释放内存if(isset($water_info))unset($water_info);if(isset($water_im))imagedestroy($water_im);unset($ground_info);imagedestroy($ground_im);}?> |
声明:有的资源均来自网络转载,版权归原作者所有,如有侵犯到您的权益 请联系邮箱:312334557@qq.com 我们将配合处理!
原文地址:《[7.5+版] 帝国CMS缩略图函数改进(GD库改进)》发布于2022-04-09 19:36:53