当前位置:首页 > PHP教程 > php图像处理 > 列表

php等比例缩放图片及剪切图片代码分享

发布:smiling 来源: PHP粉丝网  添加日期:2021-07-09 14:16:36 浏览: 评论:0 

这篇文章给大家分享的是使用php实现的等比例缩放图片及剪切图片的代码,非常的简单实用,附上用法,有需要的小伙伴可以参考下。

php等比例缩放图片及剪切图片代码分享

  1. /** 
  2.  * 图片缩放函数(可设置高度固定,宽度固定或者最大宽高,支持gif/jpg/png三种类型) 
  3.  * Author : Specs 
  4.  * 
  5.  * @param string $source_path 源图片 
  6.  * @param int $target_width 目标宽度 
  7.  * @param int $target_height 目标高度 
  8.  * @param string $fixed_orig 锁定宽高(可选参数 width、height或者空值) 
  9.  * @return string 
  10.  */ 
  11. function myImageResize($source_path$target_width = 200, $target_height = 200, $fixed_orig = ''){ 
  12.   $source_info = getimagesize($source_path); 
  13.   $source_width = $source_info[0]; 
  14.   $source_height = $source_info[1]; 
  15.   $source_mime = $source_info['mime']; 
  16.   $ratio_orig = $source_width / $source_height
  17.   if ($fixed_orig == 'width'){ 
  18.     //宽度固定 
  19.     $target_height = $target_width / $ratio_orig
  20.   }elseif ($fixed_orig == 'height'){ 
  21.     //高度固定 
  22.     $target_width = $target_height * $ratio_orig
  23.   }else
  24.     //最大宽或最大高 
  25.     if ($target_width / $target_height > $ratio_orig){ 
  26.       $target_width = $target_height * $ratio_orig
  27.     }else
  28.       $target_height = $target_width / $ratio_orig
  29.     } 
  30.   } 
  31.   switch ($source_mime){ 
  32.     case 'image/gif'
  33.       $source_image = imagecreatefromgif($source_path); 
  34.       break
  35.       
  36.     case 'image/jpeg'
  37.       $source_image = imagecreatefromjpeg($source_path); 
  38.       break
  39.       
  40.     case 'image/png'
  41.       $source_image = imagecreatefrompng($source_path); 
  42.       break
  43.       
  44.     default
  45.       return false; 
  46.       break
  47.   } 
  48.   $target_image = imagecreatetruecolor($target_width$target_height); 
  49.   imagecopyresampled($target_image$source_image, 0, 0, 0, 0, $target_width$target_height$source_width$source_height); 
  50.   //header('Content-type: image/jpeg'); 
  51.   $imgArr = explode('.'$source_path); 
  52.   $target_path = $imgArr[0] . '_new.' . $imgArr[1]; 
  53.   imagejpeg($target_image$target_path, 100); 

用法:

myImageResize($filename, 200, 200); //最大宽高

myImageResize($filename, 200, 200, 'width'); //宽度固定

myImageResize($filename, 200, 200, 'height'); //高度固定

剪切图片为固定大小:

  1. function imagecropper($source_path$target_width$target_height){ 
  2.   $source_info = getimagesize($source_path); 
  3.   $source_width = $source_info[0]; 
  4.   $source_height = $source_info[1]; 
  5.   $source_mime = $source_info['mime']; 
  6.   $source_ratio = $source_height / $source_width
  7.   $target_ratio = $target_height / $target_width
  8.     
  9.   // 源图过高 
  10.   if ($source_ratio > $target_ratio){ 
  11.     $cropped_width = $source_width
  12.     $cropped_height = $source_width * $target_ratio
  13.     $source_x = 0; 
  14.     $source_y = ($source_height - $cropped_height) / 2; 
  15.   }elseif ($source_ratio < $target_ratio){ // 源图过宽 
  16.     $cropped_width = $source_height / $target_ratio
  17.     $cropped_height = $source_height
  18.     $source_x = ($source_width - $cropped_width) / 2; 
  19.     $source_y = 0; 
  20.   }else// 源图适中 
  21.     $cropped_width = $source_width
  22.     $cropped_height = $source_height
  23.     $source_x = 0; 
  24.     $source_y = 0; 
  25.   } 
  26.     
  27.   switch ($source_mime){ 
  28.     case 'image/gif'
  29.       $source_image = imagecreatefromgif($source_path); 
  30.       break
  31.       
  32.     case 'image/jpeg'
  33.       $source_image = imagecreatefromjpeg($source_path); 
  34.       break
  35.       
  36.     case 'image/png'
  37.       $source_image = imagecreatefrompng($source_path); 
  38.       break
  39.       
  40.     default
  41.       return false; 
  42.       break
  43.   } 
  44.     
  45.   $target_image = imagecreatetruecolor($target_width$target_height); 
  46.   $cropped_image = imagecreatetruecolor($cropped_width$cropped_height); 
  47.     
  48.   // 裁剪 
  49.   imagecopy($cropped_image$source_image, 0, 0, $source_x$source_y$cropped_width$cropped_height); 
  50.   // 缩放 
  51.   imagecopyresampled($target_image$cropped_image, 0, 0, 0, 0, $target_width$target_height$cropped_width$cropped_height); 
  52.   $dotpos = strrpos($source_path'.'); 
  53.   $imgName = substr($source_path, 0, $dotpos); 
  54.   $suffix = substr($source_path$dotpos); 
  55.   $imgNew = $imgName . '_small' . $suffix
  56.   imagejpeg($target_image$imgNew, 100); 
  57.   imagedestroy($source_image); 
  58.   imagedestroy($target_image); 
  59.   imagedestroy($cropped_image); 
  60. }

Tags: php比例缩放图 php剪切图片

分享到: