php图片缩放代码-按比例缩放或截取指定大小的缩略图 非常好用的一个方法

/**********************************************************
 * function resize:
 *
 *  = creates a resized image based on the max width
 *    specified as well as generates a thumbnail from
 *    a rectangle cut from the middle of the image.
 *
	 *    @dir    = directory image is stored in
	 *    @newdir = directory new image will be stored in
	 *    @img    = the image name
	 *    @newimg = the image new name
	 *    @max_w  = the max width of the resized image
	 *    @max_h  = the max height of the resized image
	 *    @th_x  = The starting point of the x-coordinate
	 *    @th_y  = The starting point of the y-coordinate
	 *    @th_w  = the width of the thumbnail
	 *    @th_h  = the height of the thumbnail
	 *    @cut = Whether to need cut out
	 *    @center = whether cut from the middle of the image
 *
 **********************************************************/

function resize($dir, $newdir, $img, $newimg, $max_w, $max_h, $th_x = '', $th_y = '', $th_w = '', $th_h = '',$cut = FALSE,$center = FALSE)
{
   // set destination directory
   if (!$newdir) $newdir = $dir;
   if (!$newimg) $newimg = $img;

   // get original images width and height
   list($or_w, $or_h, $or_t) = getimagesize($dir.$img);
   
   switch($or_t){
   	// original image
   	case 1:
   		$or_image = imagecreatefromgif($dir.$img);
   		break;
   	case 2:
   		$or_image = imagecreatefromjpeg($dir.$img);
   		break;
   	case 3:
   		$or_image = imagecreatefrompng($dir.$img);
   		break;
   	default:
		return '不支持的图像格式';
		break; 
   }

   // make sure image is a jpeg
   // if ($or_t == 2) {
   
       // obtain the image's ratio
//       $ratio = ($or_h / $or_w);
		$ratio = ($max_h / $max_w);

       // original image
//       $or_image = imagecreatefromjpeg($dir.$img);

       // resize image?
       if ($or_w > $max_w || $or_h > $max_h) {

           // resize by height, then width (height dominant)
           if ($max_h < $max_w) {
               $rs_h = $max_h;
               $rs_w = $rs_h / $ratio;
           }
           // resize by width, then height (width dominant)
           else {
               $rs_w = $max_w;
               $rs_h = $ratio * $rs_w;
           }

           // copy old image to new image
           $rs_image = imagecreatetruecolor($rs_w, $rs_h);
           imagecopyresampled($rs_image, $or_image, 0, 0, 0, 0, $rs_w, $rs_h, $or_w, $or_h);
       }
       // image requires no resizing
       else {
           $rs_w = $or_w;
           $rs_h = $or_h;

           $rs_image = $or_image;
       }

       // generate resized image
       DrawImage($rs_image, $newdir.$newimg,$or_t,100);

       
       //裁剪生成指定的大小 start-------------------
       if ($cut){
       		$th_image = imagecreatetruecolor($th_w, $th_h);

	       // cut out a rectangle from the resized image and store in thumbnail
	       if ($center){
	       		$new_w = (($rs_w / 2) - ($th_w / 2));
	       		$new_h = (($rs_h / 2) - ($th_h / 2));
	       }else {
	       		$new_w = $th_x;
	       		$new_h = $th_y;
	       }
	       
	
	       imagecopyresampled($th_image, $rs_image, 0, 0, $new_w, $new_h, $rs_w, $rs_h, $rs_w, $rs_h);
	
	       // generate thumbnail
	       DrawImage($th_image, $newdir.'th_'.$newimg,$or_t,100);
	       @ImageDestroy($th_image);
       }
       
       //生成指定的大小 end-------------------

//       return true;
   //} 

   // Image type was not jpeg!
   /* else {
       return false;
   } */
   @ImageDestroy($rs_image);
}

/**
*	@resource image 
*	@filename
*	@quality
*	@type
**/

function DrawImage($resource,$filename,$type,$quality){
	switch($type){
   	// original image
   	case 1:
   		$or_image = imagegif($resource,$filename);
   		break;
   	case 2:
   		$or_image = imagejpeg($resource,$filename,$quality);
   		break;
   	case 3:
   		$or_image = imagepng($resource,$filename);
   		break;
   	 
   }
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值