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 相关文章推荐
人尽可用的Windows技巧小贴士之下篇
Mar 22 PHP
php xml留言板 xml存储数据的简单例子
Aug 24 PHP
PHP导入Excel到MySQL的方法
Apr 23 PHP
Apache服务器无法使用的解决方法
May 08 PHP
注意:php5.4删除了session_unregister函数
Aug 05 PHP
PHP超牛逼无限极分类生成树方法
May 11 PHP
PHP中遇到的时区问题解决方法
Jul 23 PHP
PHP获取文本框、密码域、按钮的值实例代码
Apr 19 PHP
php-beanstalkd消息队列类实例分享
Jul 19 PHP
PHP实现文件上传后台处理脚本
Mar 04 PHP
PHP如何获取Cookie并实现模拟登录
Jul 16 PHP
php7中停止php-fpm服务的方法详解
May 09 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
迅雷下载《中学科技》怀旧期刊下载
2021/02/27 无线电
PHP基础知识介绍
2013/09/17 PHP
php生成动态验证码gif图片
2015/10/19 PHP
教大家制作简单的php日历
2015/11/17 PHP
用javascript实现无刷新更新数据的详细步骤 asp
2006/12/26 Javascript
JS 对象介绍
2010/01/20 Javascript
JQuery 插件制作实践 xMarquee插件V1.0
2010/04/02 Javascript
js控制不同的时间段显示不同的css样式的实例代码
2013/11/04 Javascript
jQuery中选择器小问题(新人难免遇到)
2014/03/31 Javascript
js清空form表单中的内容示例
2014/05/20 Javascript
jquery 为a标签绑定click事件示例代码
2014/06/23 Javascript
jQuery树形下拉菜单特效代码分享
2015/08/15 Javascript
js中实例与对象的区别讲解
2019/01/21 Javascript
js实现ATM机存取款功能
2020/10/27 Javascript
小程序实现多列选择器
2019/02/15 Javascript
Python入门篇之数字
2014/10/20 Python
Python中使用Tkinter模块创建GUI程序实例
2015/01/14 Python
python 计算两个日期相差多少个月实例代码
2017/05/24 Python
机器学习python实战之手写数字识别
2017/11/01 Python
如何优雅地改进Django中的模板碎片缓存详解
2018/07/04 Python
基于Python3.6+splinter实现自动抢火车票
2018/09/25 Python
Django框架验证码用法实例分析
2019/05/10 Python
python调试神器PySnooper的使用
2019/07/03 Python
使用python实现数组、链表、队列、栈的方法
2019/12/20 Python
python函数map()和partial()的知识点总结
2020/05/26 Python
python 深度学习中的4种激活函数
2020/09/18 Python
CSS3中的display:grid,网格布局介绍
2019/10/30 HTML / CSS
世界上最全面的草药补充剂和顶级品牌维生素网站:HerbsPro
2019/01/20 全球购物
介绍一下gcc特性
2012/01/20 面试题
EJB的角色和三个对象
2015/12/31 面试题
活动总结报告范文
2014/05/04 职场文书
小学生自我评价100字(15篇)
2014/09/18 职场文书
2014学校领导四风问题对照检查材料思想汇报
2014/09/22 职场文书
乡镇群众路线教育实践活动整改措施
2014/10/04 职场文书
结婚喜宴迎宾词
2015/08/10 职场文书
Redis基本数据类型哈希Hash常用操作命令
2022/06/01 Redis