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验证码(支持中文)
Feb 14 PHP
dedecms 批量提取第一张图片最为缩略图的代码(文章+软件)
Oct 29 PHP
PHP 用数组降低程序的时间复杂度
Dec 04 PHP
phpExcel导出大量数据出现内存溢出错误的解决方法
Feb 28 PHP
PHP处理postfix邮件内容的方法
Jun 16 PHP
PHP获取访问页面HTTP状态码的实现代码
Nov 03 PHP
Laravel实现定时任务的示例代码
Aug 10 PHP
PHPTree――php快速生成无限级分类
Mar 30 PHP
yii2安装详细流程
May 23 PHP
Yii支持多域名cors原理的实现
Dec 05 PHP
Laravel使用Queue队列的技巧汇总
Sep 02 PHP
用php实现分页效果的示例代码
Dec 10 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获取mysql版本的几种方法小结
2008/03/25 PHP
php 获取可变函数参数的函数
2009/08/26 PHP
一个基于phpQuery的php通用采集类分享
2014/04/09 PHP
PDO防注入原理分析以及使用PDO的注意事项总结
2014/10/23 PHP
一个PHP实现的轻量级简单爬虫
2015/07/08 PHP
JavaScript 字符串连接性能优化
2008/12/20 Javascript
Javascript 面向对象特性
2009/12/28 Javascript
jquery 问答知识整理
2010/02/11 Javascript
javascript抖动元素的小例子
2013/10/28 Javascript
jQuery中:text选择器用法实例
2015/01/03 Javascript
javascript使用shift+click实现选择和反选checkbox的方法
2015/05/04 Javascript
JS判断字符串包含的方法
2015/05/05 Javascript
在Python中使用glob模块查找文件路径的方法
2015/06/17 Javascript
在JavaScript中如何解决用execCommand(
2015/10/19 Javascript
用JS写的一个Ajax库(实例代码)
2016/08/06 Javascript
jQuery弹出层后禁用底部滚动条(移动端关闭回到原位置)
2016/08/29 Javascript
Angularjs2不同组件间的通信实例代码
2017/05/06 Javascript
AngularJS折叠菜单实现方法示例
2017/05/18 Javascript
vue、react等单页面项目部署到服务器的方法及vue和react的区别
2018/09/29 Javascript
js针对图片加载失败的处理方法分析
2019/08/24 Javascript
Python实现的基数排序算法原理与用法实例分析
2017/11/23 Python
Django 缓存配置Redis使用详解
2019/07/23 Python
wxpython布局的实现方法
2019/11/01 Python
Python 装饰器原理、定义与用法详解
2019/12/07 Python
Python+PyQt5实现灭霸响指功能
2020/05/25 Python
django数据模型中null和blank的区别说明
2020/09/02 Python
冰淇淋开店创业计划书
2014/02/01 职场文书
推荐信格式要求
2014/05/09 职场文书
妇联主席先进事迹
2014/05/18 职场文书
社区禁毒工作方案
2014/06/02 职场文书
井冈山红色之旅心得体会
2014/10/07 职场文书
幼儿园老师工作总结2015
2015/05/22 职场文书
2015暑假实习报告范文
2015/07/13 职场文书
2015年社区消防安全工作总结
2015/10/14 职场文书
诺贝尔奖获得者名言100句:句句启人心智,值永久收藏
2019/08/09 职场文书
使用这 6个Vue加载动画库来减少我们网站的跳出率
2021/05/18 Vue.js