PHP生成图片缩略图类示例


Posted in PHP onJanuary 12, 2017

本文实例讲述了PHP生成图片缩略图类。分享给大家供大家参考,具体如下:

class App_image_helper {
  protected $imgFileName;
  protected $imgWidth;
  protected $imgHeight;
  protected $imgMime;
  protected $imgResource;
  static  $imgMineList
    = array(
      'jpeg' => 'image/jpeg',
      'gif' => 'image/gif',
      'png' => 'image/png',
      'wbmp' => 'image/wbmp',
    );
  /**
   * 根据文件名,初始化图片,
   * 计算出给定图片的宽、高、图片类型,并获取图片的资源保存到内存,便于下次使用
   * App_image_helper constructor.
   *
   * @param $fileName
   */
  public function __construct($fileName) {
    $this->imgFileName = $fileName;
    list($this->imgWidth, $this->imgHeight, $this->imgMime) = $this->getImageInfo($this->imgFileName);
    $this->imgResource = $this->getImageResource($this->imgFileName);
  }
  /**
   * 根据图片路径获取相关宽、高、MIME类型信息
   *
   * @param $fileName
   *
   * @return array|null
   */
  protected function getImageInfo($fileName) {
    $result = null;
    if ( is_file($fileName) ) {
      $tmpImageInfo = getimagesize($fileName);
      if ( $tmpImageInfo ) {
        $result = array($tmpImageInfo[0], $tmpImageInfo[1], $tmpImageInfo['mime']);
      }
    }
    return $result;
  }
  /**
   * 将图片文件转为资源类类型
   *
   * @param $fileName
   *
   * @return null|resource
   */
  protected function getImageResource($fileName) {
    $image = null;
    if ( is_file($fileName) ) {
      switch ($this->imgMime) {
        case self::$imgMineList['jpeg']:
          $image = imagecreatefromjpeg($fileName);
          break;
        case self::$imgMineList['gif']:
          $image = imagecreatefromgif($fileName);
          break;
        case self::$imgMineList['png']:
          $image = imagecreatefrompng($fileName);
          break;
        case self::$imgMineList['wbmp']:
          $image = imagecreatefromwbmp($fileName);
          break;
        default:
          break;
      }
    }
    return $image;
  }
  /**
   * 可根据固定宽,等比缩放图片;或根据百分比,等比缩放图片
   *
   * @param int $width
   * @param int $percent
   *
   * @return array|null
   */
  protected function getSizeByScale($width = 360, $percent = 1) {
    $result = null;
    if ( $this->imgWidth && $this->imgHeight ) {
      if ( $width ) {
        $result = array($width, intval($width * $this->imgHeight / $this->imgWidth));
      } elseif ( $percent ) {
        $result = array(intval($this->imgWidth * $percent), intval($this->imgHeight * $percent));
      }
    }
    return $result;
  }
  /**
   * 外调
   *
   * @param int $percentOrWidth int整数表示图片缩放为固定宽度,0.0~0.99999表示缩放百分比
   * @param null $fileName
   * @param int $quality
   * @param bool $reSample    重新采样图片,默认是
   *
   * @return bool
   */
  public function createImage($percentOrWidth = 1, $fileName = null, $quality = 75, $reSample = true) {
    $result = false;
    $fileName ? header('Content-Type: ' . $this->imgMime) : false;
    $size = $this->getSizeByScale(($percentOrWidth <= 1) ? null : $percentOrWidth, $percentOrWidth);
    if ( $size ) {
      $thumb = imagecreatetruecolor($size[0], $size[1]);
      if ( $reSample ) {
        imagecopyresampled($thumb, $this->imgResource, 0, 0, 0, 0, $size[0], $size[1], $this->imgWidth, $this->imgHeight);
      } else {
        imagecopyresized($thumb, $this->imgResource, 0, 0, 0, 0, $size[0], $size[1], $this->imgWidth, $this->imgHeight);
      }
      $result = imagejpeg($thumb, $fileName, $quality);
    }
    return $result;
  }
}
PHP 相关文章推荐
用PHP4访问Oracle815
Oct 09 PHP
与数据库连接
Oct 09 PHP
PHP swfupload图片上传的实例代码
Sep 30 PHP
10个简化PHP开发的工具
Dec 25 PHP
举例讲解PHP面对对象编程的多态
Aug 12 PHP
PHP防止刷新重复提交页面的示例代码
Nov 11 PHP
深入分析PHP优化及注意事项
Jul 04 PHP
PHP基于反射机制实现插件的可插拔设计详解
Nov 10 PHP
Yii 2.0中场景的使用教程
Jun 02 PHP
laravel 框架配置404等异常页面
Jan 07 PHP
Laravel 类和接口注入相关的代码
Oct 15 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
Dec 25 PHP
php+redis实现多台服务器内网存储session并读取示例
Jan 12 #PHP
[原创]PHPCMS遭遇会员投稿审核无效的解决方法
Jan 11 #PHP
YII2 实现多语言配置的方法分享
Jan 11 #PHP
laravel5.2实现区分前后台用户登录的方法
Jan 11 #PHP
PHP全功能无变形图片裁剪操作类与用法示例
Jan 10 #PHP
php实现36进制与10进制转换功能示例
Jan 10 #PHP
php获取当前url地址的方法小结
Jan 10 #PHP
You might like
改写ThinkPHP的U方法使其路由下分页正常
2014/07/02 PHP
PHP制作3D扇形统计图以及对图片进行缩放操作实例
2014/10/23 PHP
PHP中$this和$that指针使用实例
2015/01/06 PHP
[原创]php实现子字符串位置相互对调互换的方法
2016/06/02 PHP
详解PHP用substr函数截取字符串中的某部分
2016/12/03 PHP
显示、隐藏密码
2006/07/01 Javascript
javascript 数组的方法集合
2008/06/05 Javascript
innerText和innerHTML 一些问题分析
2009/05/18 Javascript
Javascript new关键字的玄机 以及其它
2010/08/25 Javascript
通过百度地图获取公交线路的站点坐标的js代码
2012/05/11 Javascript
jQuery 三击事件实现代码
2013/09/11 Javascript
Javascript核心读书有感之表达式和运算符
2015/02/11 Javascript
js实现的简洁网页滑动tab菜单效果代码
2015/08/24 Javascript
学习Javascript闭包(Closure)知识
2016/08/07 Javascript
使用vue.js编写蓝色拼图小游戏
2017/03/17 Javascript
VUE使用vuex解决模块间传值问题的方法
2017/06/01 Javascript
two.js之实现动画效果示例
2017/11/06 Javascript
详解Vue的钩子函数(路由导航守卫、keep-alive、生命周期钩子)
2018/07/24 Javascript
通过实例解析JavaScript for in及for of区别
2020/06/15 Javascript
Vue3 实现双盒子定位Overlay的示例
2020/12/22 Vue.js
VUE实现吸底按钮
2021/03/04 Vue.js
python处理文本文件并生成指定格式的文件
2014/07/31 Python
Python 网页解析HTMLParse的实例详解
2017/08/10 Python
Python+OpenCV让电脑帮你玩微信跳一跳
2018/01/04 Python
python实现自动化报表功能(Oracle/plsql/Excel/多线程)
2019/12/02 Python
关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)
2020/02/20 Python
Python如何使用input函数获取输入
2020/08/06 Python
Clarks其乐鞋荷兰官网:Clarks荷兰
2019/07/05 全球购物
德国游戏机商店:Konsolenkost
2019/12/08 全球购物
应届毕业生求职自荐书
2014/01/03 职场文书
银行介绍信范文
2014/01/10 职场文书
档案检查欢迎词
2014/01/13 职场文书
祖国在我心中演讲稿400字
2014/05/04 职场文书
2015年个人招商工作总结
2015/04/25 职场文书
python元组打包和解包过程详解
2021/08/02 Python
Spring Cloud OAuth2实现自定义token返回格式
2022/06/25 Java/Android