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 相关文章推荐
层叠菜单的动态生成
Oct 09 PHP
PHP+Tidy-完美的XHTML纠错+过滤
Apr 10 PHP
ZF等常用php框架中存在的问题
Jan 10 PHP
10条PHP编程习惯助你找工作
Sep 29 PHP
在Windows系统上安装PHP运行环境文字教程
Jul 19 PHP
php生成图形验证码几种方法小结
Aug 15 PHP
解决Codeigniter不能上传rar和zip压缩包问题
Mar 07 PHP
php检测useragent版本示例
Mar 24 PHP
PHP图片处理之使用imagecopy函数添加图片水印实例
Nov 19 PHP
php计算两个坐标(经度,纬度)之间距离的方法
Apr 17 PHP
php+mysql实现的二级联动菜单效果详解
May 10 PHP
php如何修改SESSION的生存存储时间的实例代码
Jul 05 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设计聊天室步步通
2006/10/09 PHP
destoon实现调用热门关键字的方法
2014/07/15 PHP
利用PHP脚本在Linux下用md5函数加密字符串的方法
2015/06/29 PHP
ThinkPHP 整合Bootstrap Ajax分页样式
2016/12/23 PHP
详解Yii2 之 生成 URL 的方法
2017/06/16 PHP
php探针使用原理和技巧讲解
2019/09/17 PHP
laravel框架中控制器的创建和使用方法分析
2019/11/23 PHP
解读IE和firefox下JScript和HREF的执行顺序
2008/01/12 Javascript
iframe 上下滚动条如何默认在下方实现原理
2012/12/10 Javascript
解析window.open的使用方法总结
2013/06/19 Javascript
新增加的内容是如何将div的scrollbar自动移动最下面
2014/01/02 Javascript
让JavaScript中setTimeout支持链式操作的方法
2015/06/19 Javascript
angularjs ui-router中路由的二级嵌套
2017/03/10 Javascript
JS实现搜索关键词的智能提示功能
2017/07/07 Javascript
利用CDN加速react webpack打包后的文件详解
2018/02/22 Javascript
使用Vue调取接口,并渲染数据的示例代码
2019/10/28 Javascript
微信小程序事件流原理解析
2019/11/27 Javascript
js实现贪吃蛇小游戏(加墙)
2020/07/31 Javascript
解决vue-router路由拦截造成死循环问题
2020/08/05 Javascript
[08:17]Ti9 现场cosplay
2019/09/10 DOTA
Python中使用装饰器和元编程实现结构体类实例
2015/01/28 Python
python引入导入自定义模块和外部文件的实例
2017/07/24 Python
浅谈Python peewee 使用经验
2017/10/20 Python
Python Xml文件添加字节属性的方法
2018/03/31 Python
Django用数据库表反向生成models类知识点详解
2020/03/25 Python
Python collections.defaultdict模块用法详解
2020/06/18 Python
HTML5 实战PHP之Web页面表单设计
2011/10/09 HTML / CSS
HTML5录音实践总结(Preact)
2020/05/07 HTML / CSS
英国综合网上购物商城:The Hut
2018/07/03 全球购物
澳大利亚实惠时尚女装商店:Katies
2019/06/16 全球购物
日本酒店、民宿、温泉旅馆、当地旅行团中文预订:e路东瀛
2019/12/09 全球购物
编程实现当输入某产品代码则打印出该产品记录的功能
2014/05/03 面试题
暑期教师培训方案
2014/06/07 职场文书
python实现图片九宫格分割的示例
2021/04/25 Python
Python 内置函数速查表一览
2021/06/02 Python
win11高清晰音频管理器在哪里?win11找不到高清晰音频管理器解决办法
2022/04/08 数码科技