liuyuehua 发表于 2018-12-21 09:52:54

php按比例裁剪图片

  /**
   * 图片裁剪函数,支持方位裁剪两种裁剪模式,李生虎3/31添加
   * @param   $src_file       原图片路径
   * @param      $new_width      裁剪后图片宽度(当宽度超过原图片宽度时,去原图片宽度)
   * @param      $new_height   裁剪后图片高度(当宽度超过原图片宽度时,去原图片高度)
   * @param      $start_x      起始位置X (当选定方位模式裁剪时,此参数不起作用)
   * @param      $start_y      起始位置Y(当选定方位模式裁剪时,此参数不起作用)
  * @param      $times      放缩比例
   * @return                  裁剪图片的文件名,出错则返回false
   */
  public function thumbimg($src_file, $target_width, $target_height,$start_x = 0, $start_y = 0,$times) {
  $res['state']=0;//标志剪切是否成功
  $res['msg']='';//返回剪切信息
  $start_x*=$times;
  $start_y*=$times;
  $new_width=$target_width*$times;
  $new_height=$target_height*$times;
  $pathinfo = pathinfo($src_file);
  $newfilename= uniqid(). '.' . $pathinfo['extension'];//产生的新文件名
  //$dst_file = $pathinfo['dirname'] . '/' .$newfilename;
  $dst_file ='./Public/tmp/' .$newfilename;
  if ($target_width < 1 || $target_height < 1) {//如果新的宽度或高度非法
  $res['msg']='宽度或高度非法';
  return $res;
  }
  if (!file_exists($src_file)) {
  $res['msg']='源文件不存在';
  return $res;
  }
  // 图像类型
  $img_type = exif_imagetype($src_file);
  $support_type = array(IMAGETYPE_JPEG, IMAGETYPE_PNG, IMAGETYPE_GIF);
  if (!in_array($img_type, $support_type, true)) {
  $res['msg']='只支持jpg、png、gif格式';
  return $res;
  }
  /* 载入图像 */
  switch ($img_type) {
  case IMAGETYPE_JPEG :
  $src_img = imagecreatefromjpeg($src_file);
  break;
  case IMAGETYPE_PNG :
  $src_img = imagecreatefrompng($src_file);
  break;
  case IMAGETYPE_GIF :
  $src_img = imagecreatefromgif($src_file);
  break;
  default:
  $res['msg']='载入图像错误!';
  return $res;
  }
  /* 获取源图片的宽度和高度 */
  $src_width = imagesx($src_img);
  $src_height = imagesy($src_img);
  /* 计算剪切图片的宽度和高度 */
  $mid_width = ($src_width < $new_width) ? $src_width : $new_width;
  $mid_height = ($src_height < $new_height) ? $src_height : $new_height;
  // 为剪切图像创建背景画板
  $mid_img = imagecreatetruecolor($mid_width, $mid_height);
  //拷贝剪切的图像数据到画板,生成剪切图像
  imagecopy($mid_img, $src_img, 0, 0, $start_x, $start_y, $mid_width, $mid_height);
  // 为裁剪图像创建背景画板
  $new_img = imagecreatetruecolor($target_width, $target_height);
  //拷贝剪切图像到背景画板,并按比例裁剪
  imagecopyresampled($new_img, $mid_img, 0, 0, 0, 0, $target_width, $target_height, $mid_width, $mid_height);
  /* 按格式保存为图片 */
  switch ($img_type) {
  case IMAGETYPE_JPEG :
  imagejpeg($new_img, $dst_file, 100);
  break;
  case IMAGETYPE_PNG :
  imagepng($new_img, $dst_file, 9);
  break;
  case IMAGETYPE_GIF :
  imagegif($new_img, $dst_file, 100);
  break;
  default:
  break;
  }
  $res['state']=1;
  $res['msg']=$dst_file;
  return $res;
  }
  




页: [1]
查看完整版本: php按比例裁剪图片