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 相关文章推荐
Php做的端口嗅探器--可以指定网站和端口
Oct 09 PHP
PHP闭包(Closure)使用详解
May 02 PHP
PHP is_subclass_of函数的一个BUG和解决方法
Jun 01 PHP
PHP小技巧之函数重载
Jun 02 PHP
php遍历数组的4种方法总结
Jul 05 PHP
PHP中cookie和session的区别实例分析
Aug 28 PHP
php实现Mysql简易操作类
Oct 11 PHP
浅谈php中的访问修饰符private、protected、public的作用范围
Nov 20 PHP
PHP实现找出有序数组中绝对值最小的数算法分析
Aug 07 PHP
php获取目录下所有文件及目录(多种方法)(推荐)
May 14 PHP
Laravel监听数据库访问,打印SQL的例子
Oct 24 PHP
Laravel框架使用技巧之使用url()全局函数返回前一个页面的地址方法详解
Apr 06 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中防止伪造跨站请求的小招式
2011/09/02 PHP
php stream_get_meta_data返回值
2013/09/29 PHP
浅谈Eclipse PDT调试PHP程序
2014/06/09 PHP
php数组生成html下拉列表的方法
2015/07/20 PHP
PHP从二维数组得到N层分类树的实现代码
2016/10/11 PHP
PHP面向对象程序设计之对象生成方法详解
2016/12/02 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
2020/03/26 PHP
JavaScript性能陷阱小结(附实例说明)
2010/12/28 Javascript
基于JQuery实现鼠标点击文本框显示隐藏提示文本
2012/02/23 Javascript
常见表单重复提交问题整理及解决方法
2013/11/13 Javascript
Javascript 按位与赋值运算符 (&amp;=)使用介绍
2014/02/04 Javascript
JavaScript 中 avalon绑定属性总结
2016/10/19 Javascript
React简单介绍
2017/05/24 Javascript
在Layui中实现开关按钮的效果实例
2019/09/29 Javascript
Vue+Element UI 树形控件整合下拉功能菜单(tree + dropdown +input)
2020/08/28 Javascript
python自动格式化json文件的方法
2015/03/11 Python
Python采用Django制作简易的知乎日报API
2016/08/03 Python
Python基于socket模块实现UDP通信功能示例
2018/04/10 Python
Pandas:DataFrame对象的基础操作方法
2018/06/07 Python
python 随机打乱 图片和对应的标签方法
2018/12/14 Python
如何在Django中添加没有微秒的 DateTimeField 属性详解
2019/01/30 Python
pycharm永久激活超详细教程
2020/10/29 Python
HTML5+CSS3 实现灵动的动画 TAB 切换效果(DEMO)
2017/09/15 HTML / CSS
有趣、实用和鼓舞人心的产品:Inspire Uplift
2019/11/05 全球购物
奖学金自我鉴定范文
2013/10/03 职场文书
外语系毕业生自荐信范文
2013/12/16 职场文书
先进班级集体事迹材料
2014/01/30 职场文书
解除劳动合同证明书模板
2014/11/20 职场文书
门市房租房协议书
2014/12/04 职场文书
幼儿园园长新年寄语2015
2014/12/08 职场文书
劳动仲裁调解书
2015/05/20 职场文书
幼师自荐信范文(2016推荐篇)
2016/01/28 职场文书
2016年全国助残日活动总结
2016/04/01 职场文书
简单介绍 http请求响应参数、无连接无状态、MIME、状态码、端口、telnet、curl
2021/03/31 HTML / CSS
吃通javascript正则表达式
2021/04/21 Javascript
Ajax常用封装库——Axios的使用
2021/05/08 Javascript