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

5年以前  |  阅读数:467 次  |  编程语言:PHP 

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


    /**
     * 图片缩放函数(可设置高度固定,宽度固定或者最大宽高,支持gif/jpg/png三种类型)
     * Author : Specs
     *
     * @param string $source_path 源图片
     * @param int $target_width 目标宽度
     * @param int $target_height 目标高度
     * @param string $fixed_orig 锁定宽高(可选参数 width、height或者空值)
     * @return string
     */
    function myImageResize($source_path, $target_width = 200, $target_height = 200, $fixed_orig = ''){
      $source_info = getimagesize($source_path);
      $source_width = $source_info[0];
      $source_height = $source_info[1];
      $source_mime = $source_info['mime'];
      $ratio_orig = $source_width / $source_height;
      if ($fixed_orig == 'width'){
        //宽度固定
        $target_height = $target_width / $ratio_orig;
      }elseif ($fixed_orig == 'height'){
        //高度固定
        $target_width = $target_height * $ratio_orig;
      }else{
        //最大宽或最大高
        if ($target_width / $target_height > $ratio_orig){
          $target_width = $target_height * $ratio_orig;
        }else{
          $target_height = $target_width / $ratio_orig;
        }
      }
      switch ($source_mime){
        case 'image/gif':
          $source_image = imagecreatefromgif($source_path);
          break;

        case 'image/jpeg':
          $source_image = imagecreatefromjpeg($source_path);
          break;

        case 'image/png':
          $source_image = imagecreatefrompng($source_path);
          break;

        default:
          return false;
          break;
      }
      $target_image = imagecreatetruecolor($target_width, $target_height);
      imagecopyresampled($target_image, $source_image, 0, 0, 0, 0, $target_width, $target_height, $source_width, $source_height);
      //header('Content-type: image/jpeg');
      $imgArr = explode('.', $source_path);
      $target_path = $imgArr[0] . '_new.' . $imgArr[1];
      imagejpeg($target_image, $target_path, 100);
    }

用法:

  1. myImageResize($filename, 200, 200); //最大宽高
  2. myImageResize($filename, 200, 200, 'width'); //宽度固定
  3. myImageResize($filename, 200, 200, 'height'); //高度固定

剪切图片为固定大小:


    function imagecropper($source_path, $target_width, $target_height){
      $source_info = getimagesize($source_path);
      $source_width = $source_info[0];
      $source_height = $source_info[1];
      $source_mime = $source_info['mime'];
      $source_ratio = $source_height / $source_width;
      $target_ratio = $target_height / $target_width;

      // 源图过高
      if ($source_ratio > $target_ratio){
        $cropped_width = $source_width;
        $cropped_height = $source_width * $target_ratio;
        $source_x = 0;
        $source_y = ($source_height - $cropped_height) / 2;
      }elseif ($source_ratio < $target_ratio){ // 源图过宽
        $cropped_width = $source_height / $target_ratio;
        $cropped_height = $source_height;
        $source_x = ($source_width - $cropped_width) / 2;
        $source_y = 0;
      }else{ // 源图适中
        $cropped_width = $source_width;
        $cropped_height = $source_height;
        $source_x = 0;
        $source_y = 0;
      }

      switch ($source_mime){
        case 'image/gif':
          $source_image = imagecreatefromgif($source_path);
          break;

        case 'image/jpeg':
          $source_image = imagecreatefromjpeg($source_path);
          break;

        case 'image/png':
          $source_image = imagecreatefrompng($source_path);
          break;

        default:
          return false;
          break;
      }

      $target_image = imagecreatetruecolor($target_width, $target_height);
      $cropped_image = imagecreatetruecolor($cropped_width, $cropped_height);

      // 裁剪
      imagecopy($cropped_image, $source_image, 0, 0, $source_x, $source_y, $cropped_width, $cropped_height);
      // 缩放
      imagecopyresampled($target_image, $cropped_image, 0, 0, 0, 0, $target_width, $target_height, $cropped_width, $cropped_height);
      $dotpos = strrpos($source_path, '.');
      $imgName = substr($source_path, 0, $dotpos);
      $suffix = substr($source_path, $dotpos);
      $imgNew = $imgName . '_small' . $suffix;
      imagejpeg($target_image, $imgNew, 100);
      imagedestroy($source_image);
      imagedestroy($target_image);
      imagedestroy($cropped_image);
    }
 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例