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 相关文章推荐
我的论坛源代码(二)
Oct 09 PHP
PHP数字格式化
Dec 06 PHP
PHP数据流应用的一个简单实例
Sep 14 PHP
php 中文字符串首字母的获取函数分享
Nov 04 PHP
PHP微框架Dispatch简介
Jun 12 PHP
C/S和B/S两种架构区别与优缺点分析
Oct 23 PHP
PHP动态页生成静态页的3种常用方法
Nov 13 PHP
php删除文本文件中重复行的方法
Apr 28 PHP
Thinkphp结合ajaxFileUpload实现异步图片传输示例
Mar 13 PHP
PHP图片水印类的封装
Jul 06 PHP
PHP7使用ODBC连接SQL Server2008 R2数据库示例【基于thinkPHP5.1框架】
May 06 PHP
php常用日期时间函数实例小结
Jul 04 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去除换行符的方法小结(PHP_EOL变量的使用)
2013/02/16 PHP
PHP微信红包生成代码分享
2016/10/06 PHP
jquery ready函数源代码研究
2009/12/06 Javascript
理解Javascript_15_作用域分配与变量访问规则,再送个闭包
2010/10/20 Javascript
FF火狐下获取一个元素同类型的相邻元素实现代码
2012/12/15 Javascript
常用js字符串判断方法整理
2013/10/18 Javascript
使用js画图之画切线
2015/01/12 Javascript
JavaScript操作URL的相关内容集锦
2015/10/29 Javascript
jQuery对html元素的取值与赋值实例详解
2015/12/18 Javascript
详解jQuery的Cookie插件
2016/11/23 Javascript
Highcharts+NodeJS搭建数据可视化平台示例
2017/01/01 NodeJs
详解vue-router 2.0 常用基础知识点之router.push()
2017/05/10 Javascript
jquery ztree实现右键收藏功能
2017/11/20 jQuery
解析vue中的$mount
2017/12/21 Javascript
vue项目中使用ueditor的实例讲解
2018/03/05 Javascript
JS选取DOM元素常见操作方法实例分析
2018/12/10 Javascript
详解Element 指令clickoutside源码分析
2019/02/15 Javascript
ES6 let和const定义变量与常量的应用实例分析
2019/06/27 Javascript
JavaScript实现省市区三级联动
2020/02/13 Javascript
kNN算法python实现和简单数字识别的方法
2014/11/18 Python
pygame学习笔记(2):画点的三种方法和动画实例
2015/04/15 Python
python中cPickle类使用方法详解
2018/08/27 Python
Pycharm+Scrapy安装并且初始化项目的方法
2019/01/15 Python
通过python-pptx模块操作ppt文件的方法
2020/12/26 Python
德国低价购买灯具和家具网站:Style-home.de
2016/11/25 全球购物
汤米巴哈马官方网站:Tommy Bahama
2017/05/13 全球购物
纽约服装和生活方式品牌:Saturdays NYC
2017/08/13 全球购物
Viking Direct爱尔兰:办公用品和家具
2019/11/21 全球购物
网络体系结构及协议的定义
2014/03/13 面试题
个人简历中的自我评价怎么写
2014/01/26 职场文书
2014大学生党员评议个人总结
2014/09/22 职场文书
个人作风纪律整顿整改措施
2014/10/25 职场文书
2015年物业管理员工工作总结
2015/10/15 职场文书
运动会口号霸气押韵
2015/12/24 职场文书
nginx实现动静分离的方法示例
2021/11/07 Servers
springboot layui hutool Excel导入的实现
2022/03/31 Java/Android