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 相关文章推荐
基于mysql的bbs设计(五)
Oct 09 PHP
PHP动态变静态原理
Nov 25 PHP
php根据身份证号码计算年龄的实例代码
Jan 18 PHP
PHP使用Alexa API获取网站的Alexa排名例子
Jun 12 PHP
PHP与MYSQL中UTF8 中文排序示例代码
Oct 23 PHP
php中explode的负数limit用法分析
Feb 27 PHP
使用图灵api创建微信聊天机器人
Jul 23 PHP
php base64 编码与解码实例代码
Mar 21 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
Jun 16 PHP
Laravel框架自定义分页样式操作示例
Jan 26 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
Apr 04 PHP
tp5.1 框架查询表达式用法详解
May 25 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和.net中des加解密的实现方法
2013/02/27 PHP
Win7 64位系统下PHP连接Oracle数据库
2014/08/20 PHP
php使用unset()删除数组中某个单元(键)的方法
2015/02/17 PHP
PHP explode()函数用法讲解
2019/02/15 PHP
JavaScript Scoping and Hoisting 翻译
2012/07/03 Javascript
浅析Javascript使用include/require
2013/11/13 Javascript
javascript实现客户端兼容各浏览器创建csv并下载的方法
2015/03/23 Javascript
js仿黑客帝国字母掉落效果代码分享
2020/11/08 Javascript
jQuery实现仿美橙互联两级导航菜单效果完整实例
2015/09/17 Javascript
javascript动态生成树形菜单的方法
2015/11/14 Javascript
鼠标悬停小图标显示大图标
2016/01/22 Javascript
详解Javascript中的Object对象
2016/02/28 Javascript
Vue2.0结合webuploader实现文件分片上传功能
2018/03/09 Javascript
解决vue脚手架项目打包后路由视图不显示的问题
2018/09/20 Javascript
jQuery Ajax实现Select多级关联动态绑定数据的实例代码
2018/10/26 jQuery
原生JS实现微信通讯录
2020/06/18 Javascript
Vue中关闭弹窗组件时销毁并隐藏操作
2020/09/01 Javascript
在项目vue中使用echarts的操作步骤
2020/09/07 Javascript
python网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)
2014/04/25 Python
python 计算两个日期相差多少个月实例代码
2017/05/24 Python
pandas使用get_dummies进行one-hot编码的方法
2018/07/10 Python
利用Python脚本批量生成SQL语句
2020/03/04 Python
Xadmin+rules实现多选行权限方式(级联效果)
2020/04/07 Python
利用scikitlearn画ROC曲线实例
2020/07/02 Python
美国潜水装备、水肺潜水和浮潜设备商店:Leisure Pro
2018/08/08 全球购物
Ticketmaster意大利:音乐会、节日、艺术和剧院的官方门票
2019/12/23 全球购物
《母亲的恩情》教学反思
2014/02/13 职场文书
合作经营协议书范本
2014/09/16 职场文书
2014年村委会工作总结
2014/11/24 职场文书
村官个人总结范文
2015/03/03 职场文书
2015年女职工工作总结
2015/05/15 职场文书
公司新员工欢迎词
2015/09/30 职场文书
golang协程池模拟实现群发邮件功能
2021/05/02 Golang
MySQL 使用索引扫描进行排序
2021/06/20 MySQL
详解MySql中InnoDB存储引擎中的各种锁
2022/02/12 MySQL
Android开发 使用文件储存的方式保存QQ密码
2022/04/24 Java/Android