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添加MySQL数据记录代码
Jun 07 PHP
php实现的仿阿里巴巴实现同类产品翻页
Dec 11 PHP
php数组函数序列之next() - 移动数组内部指针到下一个元素的位置,并返回该元素值
Oct 31 PHP
PHP中使用TCPDF生成PDF文档实例
Jul 01 PHP
jquery获取多个checkbox的值异步提交给php的方法
Jun 24 PHP
浅谈php的优缺点
Jul 14 PHP
WordPress主题制作之模板文件的引入方法
Dec 28 PHP
PHP模板引擎Smarty中变量的使用方法示例
Apr 11 PHP
Zend Framework数据库操作方法实例总结
Dec 11 PHP
在Mac OS下搭建LNMP开发环境的步骤详解
Mar 10 PHP
PHP实现更改hosts文件的方法示例
Aug 08 PHP
PHP函数用法详解【初始化、嵌套、内置函数等】
Jun 02 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
PHP+DBM的同学录程序(2)
2006/10/09 PHP
用PHP和ACCESS写聊天室(三)
2006/10/09 PHP
PHP中数组合并的两种方法及区别介绍
2012/09/14 PHP
php字符比较函数similar_text、strnatcmp与strcasecmp用法分析
2014/11/18 PHP
js资料prototype 属性
2007/03/13 Javascript
JavaScript 实现模态对话框 源代码大全
2009/05/02 Javascript
Jquery实现的一种常用高亮效果示例代码
2014/01/28 Javascript
AngularJS基础学习笔记之控制器
2015/05/10 Javascript
javascript中不易分清的slice,splice和split三个函数
2016/03/29 Javascript
基于JavaScript实现轮播图代码
2016/07/14 Javascript
js style.display=block显示布局错乱问题的解决方法
2016/09/21 Javascript
基于Layer+jQuery的自定义弹框
2020/05/26 Javascript
简单谈谈Javascript函数中的arguments
2017/02/09 Javascript
jQuery插件echarts实现的去掉X轴、Y轴和网格线效果示例【附demo源码下载】
2017/03/04 Javascript
JS实现上传图片实时预览功能
2017/05/22 Javascript
JavaScript闭包原理与用法实例分析
2018/08/10 Javascript
Vue CLI3 开启gzip压缩文件的方式
2018/09/30 Javascript
微信小程序 动态修改页面数据及参数传递过程详解
2019/09/27 Javascript
uni-app如何实现增量更新功能
2020/01/03 Javascript
vue集成一个支持图片缩放拖拽的富文本编辑器
2021/01/29 Vue.js
vue登录页实现使用cookie记住7天密码功能的方法
2021/02/18 Vue.js
python flask安装和命令详解
2019/04/02 Python
python3转换code128条形码的方法
2019/04/17 Python
如何获取Python简单for循环索引
2019/11/21 Python
python 实现矩阵按对角线打印
2019/11/29 Python
CSS3 实现图形下落动画效果
2020/11/13 HTML / CSS
Javascript 高级手势使用介绍
2013/04/21 HTML / CSS
文明班级建设方案
2014/05/15 职场文书
道歉情书大全
2015/05/12 职场文书
幼儿园园长工作总结2015
2015/05/25 职场文书
主题班会开场白
2015/06/01 职场文书
交流会主持词
2015/07/02 职场文书
2016三八妇女节慰问信
2015/11/30 职场文书
2016简单的租房合同范本
2016/03/18 职场文书
vue 数字翻牌器动态加载数据
2022/04/20 Vue.js
nginx之queue的具体使用
2022/06/28 Servers