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脚本的10个技巧(6)
Oct 09 PHP
我的论坛源代码(八)
Oct 09 PHP
利用PHP实现与ASP Banner组件相似的类
Oct 09 PHP
php下过滤html代码的函数 提高程序安全性
Mar 02 PHP
PHP模板引擎Smarty的缓存使用总结
Apr 24 PHP
PHP调用存储过程返回值不一致问题的解决方法分析
Apr 26 PHP
PHP获取redis里不存在的6位随机数应用示例【设置24小时过时】
Jun 07 PHP
PHP实现数组转JSon和JSon转数组的方法示例
Jun 14 PHP
PHP registerXPathNamespace()函数讲解
Feb 03 PHP
Laravel 实现关系模型取出需要的字段
Oct 10 PHP
Laravel框架使用技巧之使用url()全局函数返回前一个页面的地址方法详解
Apr 06 PHP
PHP7 其他语言层面的修改
Mar 09 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
玩转虚拟域名◎+ .
2006/10/09 PHP
escape unescape的php下的实现方法
2007/04/27 PHP
PHP开发中常用的字符串操作函数
2011/02/08 PHP
php根据某字段对多维数组进行排序的方法
2015/03/07 PHP
PHP中使用curl伪造IP的简单方法
2015/08/07 PHP
PHP设置images目录不充许http访问的方法
2016/11/01 PHP
JavaScript 异步方法队列链实现代码分析
2010/06/05 Javascript
jQuery form插件之ajaxForm()和ajaxSubmit()的可选参数项对象
2016/01/23 Javascript
JS控制HTML元素的显示和隐藏的两种方法
2016/09/27 Javascript
Vue 仿百度搜索功能实现代码
2017/02/16 Javascript
详解react使用react-bootstrap当轮子造车
2017/08/15 Javascript
浅谈vue项目打包优化策略
2018/09/29 Javascript
微信小程序自定义轮播图
2018/11/04 Javascript
Vue实现简单分页器
2018/12/29 Javascript
three.js利用gpu选取物体并计算交点位置的方法示例
2019/11/25 Javascript
基于vue项目设置resolves.alias: '@'路径并适配webstorm
2020/12/02 Vue.js
js实现简单的倒计时
2021/01/28 Javascript
[02:37]TI8勇士令状不朽珍藏II视频展示
2018/06/23 DOTA
[56:42]完美世界DOTA2联赛循环赛 Matador vs Forest 第二场 11.06
2020/11/06 DOTA
Python中的变量和作用域详解
2016/07/13 Python
基于Python中capitalize()与title()的区别详解
2017/12/09 Python
python3+PyQt5实现支持多线程的页面索引器应用程序
2018/04/20 Python
Django使用redis缓存服务器的实现代码示例
2019/04/28 Python
Python3网络爬虫中的requests高级用法详解
2019/06/18 Python
详解Python二维数组与三维数组切片的方法
2019/07/18 Python
python 解压、复制、删除 文件的实例代码
2020/02/26 Python
Django 自定义权限管理系统详解(通过中间件认证)
2020/03/11 Python
Hammitt官网:设计师手袋
2020/05/23 全球购物
数控专业个人求职信范例
2013/11/29 职场文书
英文请假条
2014/04/11 职场文书
协议书样本
2014/04/23 职场文书
求职信怎么写
2014/05/23 职场文书
超市开业庆典活动策划方案
2014/09/15 职场文书
圣贤教育改变命运观后感
2015/06/16 职场文书
子女赡养老人协议书
2016/03/23 职场文书
python3 实现mysql数据库连接池的示例代码
2021/04/17 Python