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 相关文章推荐
在windows服务器开启php的gd库phpinfo中未发现
Jan 13 PHP
php 读取文件头判断文件类型的实现代码
Aug 05 PHP
php通过排列组合实现1到9数字相加都等于20的方法
Aug 03 PHP
php中二维数组排序问题方法详解
Aug 28 PHP
php+ajax制作无刷新留言板
Oct 27 PHP
php实现图片上传并进行替换操作
Mar 15 PHP
thinkPHP+PHPExcel实现读取文件日期的方法(含时分秒)
Jul 07 PHP
PHP用PDO如何封装简单易用的DB类详解
Jul 30 PHP
使用PHPStorm+XDebug搭建单步调试环境
Nov 19 PHP
详解php命令注入攻击
Apr 06 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
Nov 23 PHP
PHP+Redis事务解决高并发下商品超卖问题(推荐)
Aug 03 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
PHP个人网站架设连环讲(二)
2006/10/09 PHP
PhpMyAdmin中无法导入sql文件的解决办法
2010/01/08 PHP
介绍一些PHP判断变量的函数
2012/04/24 PHP
php获取bing每日壁纸示例分享
2014/02/25 PHP
PHP中使用数组指针函数操作数组示例
2014/11/19 PHP
Yii获取当前url和域名的方法
2015/06/08 PHP
php使用timthumb生成缩略图的方法
2016/01/22 PHP
jquery实现键盘左右翻页特效
2015/04/30 Javascript
js实现简单折叠、展开菜单的方法
2015/08/28 Javascript
AngularJS实现数据列表的增加、删除和上移下移等功能实例
2016/09/05 Javascript
微信小程序 教程之模板
2016/10/18 Javascript
javascript垃圾收集机制的原理分析
2016/12/08 Javascript
Bootstrap按钮组简单实现代码
2017/03/06 Javascript
jQuery 点击获取验证码按钮及倒计时功能
2018/09/20 jQuery
小程序实现新用户判断并跳转激活的方法
2019/05/20 Javascript
微信小程序使用字体图标的方法
2019/05/23 Javascript
关于layui flow loading占位图的实现方法
2019/09/21 Javascript
微信小程序select下拉框实现源码
2019/11/08 Javascript
解决vue-cli 打包后自定义动画未执行的问题
2019/11/12 Javascript
Python 单例设计模式用法实例分析
2019/09/23 Python
python 两种方法删除空文件夹
2020/09/29 Python
python中entry用法讲解
2020/12/04 Python
python中time.ctime()实例用法
2021/02/03 Python
html5需遵循的6个设计原则
2016/04/27 HTML / CSS
俄罗斯品牌服装和鞋子的在线商店:KUPIVIP
2019/10/27 全球购物
美国手机支架公司:PopSockets
2019/11/27 全球购物
消防标语大全
2014/06/07 职场文书
导航工程专业自荐信
2014/09/02 职场文书
新学期红领巾广播稿
2014/10/04 职场文书
本溪关门山导游词
2015/02/09 职场文书
体育教师个人总结
2015/02/09 职场文书
试用期解除劳动合同通知书
2015/04/16 职场文书
2015年办公室个人工作总结
2015/04/20 职场文书
公司聚餐通知
2015/04/22 职场文书
利用python进行数据加载
2021/06/20 Python
Python如何快速找到多个字典中的公共键(key)
2022/04/29 Python