设为首页 收藏本站
查看: 716|回复: 0

[经验分享] php按比例裁剪图片

[复制链接]

尚未签到

发表于 2018-12-21 09:52:54 | 显示全部楼层 |阅读模式
  /**
   * 图片裁剪函数,支持方位裁剪两种裁剪模式,李生虎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、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-653893-1-1.html 上篇帖子: php文库系统解决方案 下篇帖子: PHP的gettext用法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表