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中设置计划任务执行PHP文件的方法
Dec 19 PHP
php生成局部唯一识别码LUID的代码
Oct 06 PHP
PHP的PSR规范中文版
Sep 28 PHP
ThinkPHP在新浪SAE平台的部署实例
Oct 31 PHP
PHP编写RESTful接口
Feb 23 PHP
基于PHP微信红包的算法探讨
Jul 21 PHP
PHP实现实时生成并下载超大数据量的EXCEL文件详解
Oct 23 PHP
PHP实现Redis单据锁以及防止并发重复写入
Apr 10 PHP
关于ThinkPHP中的异常处理详解
May 11 PHP
浅谈PHP array_search 和 in_array 函数效率问题
Oct 15 PHP
php 中self,this的区别和操作方法实例分析
Nov 04 PHP
PHP对接阿里云虚拟号的实现(号码隐私保护)
Apr 06 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 session有效期问题
2009/04/26 PHP
PHP设计模式之装饰者模式
2012/02/29 PHP
php文件读取方法实例分析
2015/06/20 PHP
PHP安装threads多线程扩展基础教程
2015/11/17 PHP
laravel 5.4中实现无限级分类的方法示例
2017/07/27 PHP
php-app开发接口加密详解
2018/04/18 PHP
终于解决了IE8不支持数组的indexOf方法
2013/04/03 Javascript
JS仿百度搜索自动提示框匹配查询功能
2013/11/21 Javascript
JS清空多文本框、文本域示例代码
2014/02/24 Javascript
HTML5+jQuery插件Quicksand实现超酷的星际争霸2兵种分类展示效果(附demo源码下载)
2016/05/25 Javascript
js移动焦点到最后位置的简单方法
2016/11/25 Javascript
JavaScript实现三级联动菜单实例代码
2017/06/26 Javascript
简单快速的实现js计算器功能
2017/08/17 Javascript
React Native之prop-types进行属性确认详解
2017/12/19 Javascript
详解Vue CLI3 多页应用实践和源码设计
2018/08/30 Javascript
Angular 2使用路由自定义弹出组件toast操作示例
2019/05/10 Javascript
JS中数据结构与算法---排序算法(Sort Algorithm)实例详解
2019/06/17 Javascript
如何在vue中使用jointjs过程解析
2020/05/29 Javascript
[00:59]PWL开团时刻DAY7——我在赶
2020/11/06 DOTA
Python中为feedparser设置超时时间避免堵塞
2014/09/28 Python
Python常见格式化字符串方法小结【百分号与format方法】
2016/09/18 Python
使用Python对Access读写操作
2017/03/30 Python
解决PyCharm中光标变粗的问题
2017/08/05 Python
matplotlib在python上绘制3D散点图实例详解
2017/12/09 Python
Python 机器学习库 NumPy入门教程
2018/04/19 Python
python实现猜拳小游戏
2020/04/05 Python
Python shutil模块用法实例分析
2019/10/02 Python
css3设置box-pack和box-align让div里面的元素垂直居中
2014/09/01 HTML / CSS
HTML5注册表单的自动聚焦与占位文本示例代码
2013/07/19 HTML / CSS
美国隐形眼镜网上商店:Lens.com
2019/09/03 全球购物
.net软件工程师面试题
2015/03/31 面试题
环保建议书作文
2014/03/12 职场文书
党员学习中共十八大思想报告
2014/09/12 职场文书
2014年学校卫生工作总结
2014/11/20 职场文书
大学生党员自我评价
2015/03/04 职场文书
任长霞观后感
2015/06/16 职场文书