php封装的图片(缩略图)处理类完整实例


Posted in PHP onOctober 19, 2016

本文实例讲述了php封装的图片(缩略图)处理类。分享给大家供大家参考,具体如下:

<?php
//图片处理工具类
class Image{
    //属性
    private $thumb_width; //缩略图的宽
    private $thumb_height;
    //错误属性
    public $thumb_error;
    //构造方法
    public function __construct($width = 0,$height = 0){
      $this->thumb_width = ($width == 0) ? $GLOBALS['config']['admin_goods_thumb']['width'] : $width;
      $this->thumb_height = ($height == 0) ? $GLOBALS['config']['admin_goods_thumb']['height'] : $height;
    }
    /*
     * 制作缩略图
     * @param1 string $src,原图路径,/uploads/20150122101010abcdef.gif
     * @param2 string $path,缩略图保存路径/uploads/thumb_20150122101010abcdef.gif
     * @return 缩略图的名字
    */
    public function makeThumb($src,$path){
      //判断原图是否存在
      if(!file_exists($src)){
        $this->thumb_error = '原图不存在!';
        return false;
      }
      //打开原图资源
      //获取能够使用的后缀
      $ext = $this->getFunctionName($src); //gif
      //拼凑函数名
      $open = 'imagecreatefrom' . $ext;    //imagecreatefromgif
      $save = 'image' . $ext;          //imagegif
      //如果不清楚;echo $open,$save;exit;
      //可变函数打开原图资源
      $src_img = $open($src); //利用可变函数打开图片资源
      //imagecreatefromgif($src)
      //缩略图资源
      $dst_img = imagecreatetruecolor($this->thumb_width,$this->thumb_height);
      //背景色填充白色
      $dst_bg_color = imagecolorallocate($dst_img,255,255,255);
      imagefill($dst_img,0,0,$dst_bg_color);
      //宽高比确定宽高
      $dst_size = $this->thumb_width / $this->thumb_height;
      //获取原图数据
      $file_info = getimagesize($src);
      $src_size = $file_info[0]/$file_info[1];
      //求出缩略图宽和高
      if($src_size > $dst_size){
        //原图宽高比大于缩略图
        $width = $this->thumb_width;
        $height = round($width / $src_size);
      }else{
        $height = $this->thumb_height;
        $width = round($height * $src_size);
      }
      //求出缩略图起始位置
      $dst_x = round($this->thumb_width - $width)/2;
      $dst_y = round($this->thumb_height - $height)/2;
      //制作缩略图
      if(imagecopyresampled($dst_img,$src_img,$dst_x,$dst_y,0,0,$width,$height,$file_info[0],$file_info[1])){
        //采样成功:保存,将文件保存到对应的路径下
        $thumb_name = 'thumb_' . basename($src);
        $save($dst_img,$path . '/' . $thumb_name);
        //保存成功
        return $thumb_name;
      }else{
        //采样失败
        $this->thumb_error = '缩略图采样失败!';
        return false;
      }
    }
    /*
     * 获取文件要调用的函数名
     * @param1 string $file,文件名字
     * @return 通过文件后缀名得到的函数字符串
    */
    private function getFunctionName($file){
      //得到文件的后缀
      $file_info = pathinfo($file);
      $ext = $file_info['extension']; //后缀:gif,png,jpg,jpeg,pjpeg
      //imagecreatefromgif,imagecreatefromjpeg,imagecreatefrompng
      //定义一个数组保存函数名
      $func = array(
        'gif' => 'gif',
        'png' => 'png',
        'jpg' => 'jpeg',
        'jpeg' => 'jpeg',
        'pjpeg' => 'jpeg'
      );
      //返回值
      return $func[$ext];
    }
}

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
一篇入门的php Class 文章
Apr 04 PHP
解决了Ajax、MySQL 和 Zend Framework 的乱码问题
Mar 03 PHP
解析PHPExcel使用的常用说明以及把PHPExcel整合进CI框架的介绍
Jun 24 PHP
JoshChen_web格式编码UTF8-无BOM的小细节分析
Aug 16 PHP
体育彩票排列三组选三算法分享
Mar 07 PHP
php跨站攻击实例分析
Oct 28 PHP
简单谈谈php浮点数精确运算
Mar 10 PHP
Symfony2学习笔记之插件格式分析
Mar 17 PHP
利用php操作memcache缓存的基础方法示例
Aug 02 PHP
PHP 使用二进制保存用户状态的实例
Jan 29 PHP
浅谈laravel 5.6 安装 windows上使用composer的安装过程
Oct 18 PHP
php使用goto实现自动重启swoole、reactphp、workerman服务的代码
Apr 13 PHP
php封装的表单验证类完整实例
Oct 19 #PHP
php魔术方法功能与用法实例分析
Oct 19 #PHP
php封装的smartyBC类完整实例
Oct 19 #PHP
php封装的smarty类完整实例
Oct 19 #PHP
PHP内存缓存功能memcached示例
Oct 19 #PHP
PHP实现上传图片到 zimg 服务器
Oct 19 #PHP
php通过会话控制实现身份验证实例
Oct 18 #PHP
You might like
用Flash图形化数据(二)
2006/10/09 PHP
php基于PDO实现功能强大的MYSQL封装类实例
2017/02/27 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
基于jquery的多功能软键盘插件
2012/07/25 Javascript
jquery对ajax的支持介绍
2013/12/10 Javascript
Jquery全选与反选点击执行一次的解决方案
2015/08/14 Javascript
深入理解JQuery中的事件与动画
2016/05/18 Javascript
js格式化时间的简单实例
2016/11/27 Javascript
jQuery滚动插件scrollable.js用法分析
2017/05/25 jQuery
vue全局组件与局部组件使用方法详解
2018/03/29 Javascript
Vue实现todolist删除功能
2018/06/26 Javascript
基于jquery实现的tab选项卡功能示例【附源码下载】
2019/06/10 jQuery
JS自定义右键菜单实现代码解析
2020/07/16 Javascript
解决vue-router 切换tab标签关闭时缓存问题
2020/07/22 Javascript
[02:35]DOTA2英雄基础教程 末日使者
2013/12/04 DOTA
使用python统计文件行数示例分享
2014/02/21 Python
利用Python如何生成随机密码
2016/04/20 Python
对python的unittest架构公共参数token提取方法详解
2018/12/17 Python
Python 运行 shell 获取输出结果的实例
2019/01/07 Python
Python 学习教程之networkx
2019/04/15 Python
Python 通过打码平台实现验证码的实现
2019/05/13 Python
Python箱型图绘制与特征值获取过程解析
2019/10/22 Python
pytorch1.0中torch.nn.Conv2d用法详解
2020/01/10 Python
python实现扫雷游戏
2020/03/03 Python
解决Python Matplotlib绘图数据点位置错乱问题
2020/05/16 Python
Python参数传递机制传值和传引用原理详解
2020/05/22 Python
利用CSS3参考手册和CSS3代码生成工具加速来学习网页制
2012/07/11 HTML / CSS
Ralph Lauren英国官方网站:Ralph Lauren UK
2018/04/03 全球购物
美国现代家具网站:Design Within Reach
2018/07/19 全球购物
全球性的在线商店:Vogca
2019/05/10 全球购物
财务会计专业应届毕业生求职信
2013/10/18 职场文书
冰淇淋店的创业计划书
2014/02/07 职场文书
水利公司纪检监察自我鉴定
2014/02/25 职场文书
平面设计专业大学生职业规划书
2014/03/12 职场文书
授权委托书怎么写
2014/04/03 职场文书
学雷锋活动总结报告
2014/06/26 职场文书