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中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之间的区别
Sep 05 PHP
php读取javascript设置的cookies的代码
Apr 12 PHP
PHP之数组学习
May 29 PHP
php 面试碰到过的问题 在此做下记录
Jun 09 PHP
php图片加中文水印实现代码分享
Oct 31 PHP
PHP实现简单实用的验证码类
Jul 29 PHP
PHP5.3连接Oracle客户端及PDO_OCI模块的安装方法
May 13 PHP
php pdo oracle中文乱码的快速解决方法
May 16 PHP
php基于环形链表解决约瑟夫环问题示例
Nov 07 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
Dec 21 PHP
PHP实现负载均衡下的session共用功能
Apr 17 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
很温暖很温暖的Lester Young
2021/03/03 冲泡冲煮
不支持fsockopen但支持culr环境下下ucenter与modoer通讯问题
2011/08/12 PHP
PHP实现扎金花游戏之大小比赛的方法
2015/03/10 PHP
PHP flush 函数使用注意事项
2016/08/26 PHP
浅谈thinkphp5 instance 的简单实现
2017/07/30 PHP
php生成HTML文件的类方法
2019/10/11 PHP
laravel 使用事件系统统计浏览量的实现
2019/10/16 PHP
jQuery 渐变下拉菜单
2009/12/15 Javascript
javascript中length属性的探索
2011/07/31 Javascript
js实现浏览器窗口大小被改变时触发事件的方法
2015/02/02 Javascript
Angular2中Bootstrap界面库ng-bootstrap详解
2016/10/18 Javascript
微信小程序 后台https域名绑定和免费的https证书申请详解
2016/11/10 Javascript
nodejs 终端打印进度条实例代码
2017/04/22 NodeJs
vue中设置、获取、删除cookie的方法
2018/09/21 Javascript
浅谈webpack 四个核心概念之Entry
2019/06/12 Javascript
详解Vuex下Store的模块化拆分实践
2019/07/31 Javascript
javascript 构建模块化开发过程解析
2019/09/11 Javascript
浅谈TypeScript 用 Webpack/ts-node 运行的配置记录
2019/10/11 Javascript
[39:46]完美世界DOTA2联赛PWL S2 LBZS vs Rebirth 第二场 11.25
2020/11/25 DOTA
快速了解Python相对导入
2018/01/12 Python
python smtplib模块自动收发邮件功能(二)
2018/05/22 Python
获取Pytorch中间某一层权重或者特征的例子
2019/08/17 Python
使用分层画布来优化HTML5渲染的教程
2015/05/08 HTML / CSS
简单说下OSPF的操作过程
2014/08/13 面试题
企业演讲稿范文
2013/12/28 职场文书
茶叶生产计划书
2014/01/10 职场文书
20岁生日感言
2014/01/13 职场文书
电子商务专业毕业生求职信
2014/06/12 职场文书
初中生旷课检讨书范文
2014/10/06 职场文书
离婚协议书范本(通用篇)
2014/11/30 职场文书
2014年后勤管理工作总结
2014/12/01 职场文书
自主招生自荐信格式
2015/03/04 职场文书
关于观后感的作文
2015/06/18 职场文书
浅谈如何写好演讲稿?
2019/06/12 职场文书
曾国藩励志经典名言37句,蕴含哲理
2019/10/14 职场文书
Win11 引入 Windows 365 云操作系统,适应疫情期间混合办公模式:启动时直接登录、模
2022/04/06 数码科技