CI框架封装的常用图像处理方法(缩略图,水印,旋转,上传等)


Posted in PHP onNovember 22, 2016

本文实例讲述了CI框架封装的常用图像处理方法。分享给大家供大家参考,具体如下:

其实微信手机端上图时,列表图最好是缩略图,节省流量,这不,又被移动坑了一把,话费签一分就停机,流量欠到90块才停机,我也是醉了。。。

不说废话了,下面是用CI 的内置处理图像的库写的,小弟不才,遗漏之处敬请指出,谢谢。

/**
* 生成缩略图
* @param  $path 原图的本地路径
* @return null 创建一个 原图_thumb.扩展名 的文件
*
*/
public function dealthumb($path){
    $config['image_library'] = 'gd2';
    $config['source_image'] = $path;
    $config['create_thumb'] = TRUE;
    //生成的缩略图将在保持纵横比例 在宽度和高度上接近所设定的width和height
    $config['maintain_ratio'] = TRUE;
    $config['width'] = 80;
    $config['height'] = 80;
    $this->load->library('image_lib', $config);
    $this->image_lib->resize();
    $this->image_lib->clear();
}
/*
* 处理图像旋转
*/
public function transroate($path,$imgpath){
    $this->load->library('image_lib');
    //(必须)设置图像库
    $config['image_library'] = 'gd2';
    $newname = time().'_rote.jpg';
    //设置图像的目标名/路径
    $config['new_image'] =$imgpath.$newname;
    //(必须)设置原始图像的名字/路径
    $config['source_image'] = $path;
    //决定新图像的生成是要写入硬盘还是动态的存在
    $config['dynamic_output'] = FALSE;
    //设置图像的品质。品质越高,图像文件越大
    $config['quality'] = '90%';
    //有5个旋转选项 逆时针90 180 270 度 vrt 竖向翻转 hor 横向翻转
    $config['rotation_angle'] = 'vrt';
    $this->image_lib->initialize($config);
    if(@$this->image_lib->rotate()){
      $this->image_lib->clear();
      return $config['new_image'];
    }else{
      $this->image_lib->clear();
      return '';
    }
}
/**
* 处理图像水印
*/
public function overlay($path,$imgpath){
    $this->load->library('image_lib');
    $newname = time().'_over.jpg';
    //设置新图像名称
    $config['new_image'] =$imgpath.$newname;
    //调用php gd库 绘图
    $config['image_library'] = 'gd2';
    //源图像 本地地址
    $config['source_image'] = $path;
    //覆盖文字
    $config['wm_text'] = 'Copyright 2015 - Friker';
    //覆盖类型 文字/图像
    $config['wm_type'] = 'text';
    //文字字体类型
    //$config['wm_font_path'] = 'C:\Windows\Fonts\vrinda.ttf';
    //字体大小
    $config['wm_font_size'] = '16';
    //字体颜色
    $config['wm_font_color'] = 'ff0000';
    //垂直方向距离顶端距离
    $config['wm_vrt_alignment'] = '20';
    //水平方向距离左端距离
    $config['wm_hor_alignment'] = 'center';
    //padding
    $config['wm_padding'] = '20';
    $this->image_lib->initialize($config);
    if($this->image_lib->watermark()){
      $this->image_lib->clear();
      return $config['new_image'];
    }else{
      $this->image_lib->clear();
      return '';
    }
}
/**
*  处理图片上传
*  文件上传类 通过前台 上传文件
*/
public function uploadfile(){
    //文件上传部分
    // 处理文件
    // $data = '';
    $this->load->helper('url');
    $formpic = key($_FILES);
    //文件处理部分
    if(false === empty($_FILES[$formpic]['tmp_name'])){
      //设置文件上传的路径
      $upload['upload_path'] = "./public/img/";
      //限制文件上传的类型
      $upload['allowed_types'] = 'jpeg|jpg|gif|png';
      //限制文件上传的大小
      $upload['max_size'] = 2048;
      //设置文件上传的路径
      $upload['file_name'] = date('YmdHis', time()).rand(10000, 99999);
      //加载文件上传配置信息
      $this->load->library('upload', $upload);
      //处理文件上传
      $this->upload->do_upload($formpic);
      //返回文件上传信息
      $image = $this->upload->data();
      /*
       'file_name' => string '2015071702051718388.jpg' (length=23)
       'file_type' => string 'image/jpeg' (length=10)
       'file_path' => string 'E:/wamp/www/testci/public/img/' (length=30)
       'full_path' => string 'E:/wamp/www/testci/public/img/2015071702051718388.jpg' (length=53)
       'raw_name' => string '2015071702051718388' (length=19)
       'orig_name' => string '2015071702051718388.jpg' (length=23)
       'client_name' => string 'u=415761610,1548338330&fm=116&gp=0.jpg' (length=38)
       'file_ext' => string '.jpg' (length=4)
       'file_size' => float 3.74
       'is_image' => boolean true
       'image_width' => int 146
       'image_height' => int 220
       'image_type' => string 'jpeg' (length=4)
       'image_size_str' => string 'width="146" height="220"' (length=24)
       */
      //var_dump($image);
      //返回文件上传名字
      $data = $image['file_name'];
      $this->dealthumb($image['full_path']);
      $this->overlay($image['full_path'],$image['file_path']);
      $this->transroate($image['full_path'],$image['file_path']);//
      $thumbdata = '';
      //生成缩略图名称
      $pos = strripos($image['file_name'], ".");
      $newname = substr($image['file_name'], 0,$pos)."_thumb".substr($image['file_name'], $pos);
      if(file_exists($image['file_path'].$newname)){
        $thumbdata = $newname;
      }
    }
    //$dirroot = $_SERVER['DOCUMENT_ROOT'];
    //$this->dealthumb($dirroot."/public/img/".$data);
    //上传失败
    if(!$data){
      echo json_encode(array('status'=>0,'msg'=>"上传失败!"));
    }else{
    //上传成功
      echo json_encode(array(
        'name'=>$data,
        'pic'=>base_url()."public/img/".$data,
        'picthumb'=>$thumbdata == '' ?$data:$thumbdata
        ));
    }
}

下面是前端的基本html代码:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="/public/stylesheets/bootstrap.min.css" />
<link rel="stylesheet" href="/public/stylesheets/bootstrap-responsive.min.css" />
<link rel="stylesheet" href="/public/stylesheets/matrix-style.css" />
<link rel="stylesheet" href="/public/stylesheets/matrix-media.css" />
<script type="text/javascript" src="/public/javascripts/jquery.min.js"></script>
<script type="text/javascript" src="/public/javascripts/jquery.form.js"></script>
<script type="text/javascript" src="/public/javascripts/jquery.validate.js"></script>
<style type="text/css">
body{background:#eeeeee; margin:0px;}
</style>
</head>
<body>
<div class="control-group">
  <label class="control-label"> 分享logo: </label>
  <div class="controls">
     <input type="file" name="sharepic" id="sharepic"/>
     <input type="hidden" name="act_sharepic" value="" id="act_sharepic"/>(<sapn class="fred">最佳大小为 80 X 80 像素</sapn>)
     <p style="margin:20px 0;"><img src="/public/img/default.png" alt="" id="sharepic_img"></p>
  </div>
</div>
<script type="text/javascript">
$(function () {
  /*****************图片上传部分开始 *******************/
  var act = "<form class='myupload' action='"+"<?php echo site_url('mytest/uploadfile');?>"+"' method='post' enctype='multipart/form-data'></form>";
  $("#sharepic").change(function(){
    $(this).wrap(act);
    $(this).parent(".myupload").ajaxSubmit({
      dataType: 'json',
      success: function(data) {
        var src = data.pic;
        //更改预览图像地址
        $('#sharepic_img').attr("src",src);
        $('#act_sharepic').val(data.name);
        $('#sharepic').unwrap();
      },
      error:function(xhr){
        alert(JSON.parse(xhr));
      }
    });
  });
})
</script>
</body>
</html>

希望本文所述对大家基于CodeIgniter框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP Mysql编程之高级技巧
Aug 27 PHP
PHP中判断变量为空的几种方法分享
Aug 26 PHP
thinkphp模板输出技巧汇总
Nov 24 PHP
PHP速成大法
Jan 30 PHP
PHP flush 函数使用注意事项
Aug 26 PHP
php简单压缩css样式示例
Sep 22 PHP
PHP实现阿里大鱼短信验证的实例代码
Jul 10 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
Aug 31 PHP
PHP5.6新增加的可变函数参数用法分析
Aug 25 PHP
详解Laravel5.6 Passport实现Api接口认证
Jul 27 PHP
PHP 7.4 新语法之箭头函数实例详解
May 09 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
Nov 21 PHP
php each 返回数组中当前的键值对并将数组指针向前移动一步实例
Nov 22 #PHP
CI框架中类的自动加载问题分析
Nov 21 #PHP
CI框架常用函数封装实例
Nov 21 #PHP
CI框架数据库查询缓存优化的方法
Nov 21 #PHP
CI框架AR数据库操作常用函数总结
Nov 21 #PHP
CI框架常用经典操作类总结(路由,伪静态,分页,session,验证码等)
Nov 21 #PHP
CI框架入门之MVC简单示例
Nov 21 #PHP
You might like
php技巧小结【推荐】
2017/01/19 PHP
php生成网页桌面快捷方式
2017/05/05 PHP
PHP使用文件锁解决高并发问题示例
2018/03/29 PHP
PHP创建自己的Composer包方法
2018/04/09 PHP
PHP模糊查询技术实例分析【附源码下载】
2019/03/07 PHP
Javascript----文件操作
2007/01/18 Javascript
JavaScript 三种不同位置代码的写法
2009/10/25 Javascript
json 入门基础教程 推荐
2009/10/31 Javascript
AngularJS使用ngMessages进行表单验证
2015/12/27 Javascript
jQuery animate和CSS3相结合实现缓动追逐效果附源码下载
2016/04/18 Javascript
读Javascript高性能编程重点笔记
2016/12/21 Javascript
ThinkPHP+jquery实现“加载更多”功能代码
2017/03/11 Javascript
jQuery中的deferred使用方法
2017/03/27 jQuery
js实现本地时间同步功能
2017/08/26 Javascript
一个有意思的鼠标点击文字特效jquery代码
2017/09/23 jQuery
node.js中路由,中间件,ge请求和post请求的参数详解
2017/12/26 Javascript
vue项目中jsonp跨域获取qq音乐首页推荐问题
2018/05/30 Javascript
解决vue点击控制单个样式的问题
2018/09/05 Javascript
VUE2.0+ElementUI2.0表格el-table实现表头扩展el-tooltip
2018/11/30 Javascript
vue使用Proxy实现双向绑定的方法示例
2019/03/20 Javascript
vue中使用[provide/inject]实现页面reload的方法
2019/09/30 Javascript
React倒计时功能实现代码——解耦通用
2020/09/18 Javascript
[05:35]DOTA2英雄梦之声_第13期_拉比克
2014/06/21 DOTA
Python字符串逐字符或逐词反转方法
2015/05/21 Python
Python中常见的数据类型小结
2015/08/29 Python
python自动裁剪图像代码分享
2017/11/25 Python
dataframe设置两个条件取值的实例
2018/04/12 Python
python super()函数的基本使用
2020/09/10 Python
基于Python实现全自动下载抖音视频
2020/11/06 Python
基于HTML5实现类似微信手机摇一摇功能(计算摇动次数)
2017/07/24 HTML / CSS
Burberry英国官网:英国标志性奢侈品牌
2017/03/29 全球购物
毕业生找工作推荐信
2013/11/21 职场文书
财务方面个人工作的自我评价
2013/12/28 职场文书
打架检讨书300字
2014/02/02 职场文书
喋血孤城观后感
2015/06/08 职场文书
python中urllib包的网络请求教程
2022/04/19 Python