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 5.3.1 安装包 VC9 VC6不同版本的区别是什么
Jul 04 PHP
用Json实现PHP与JavaScript间数据交换的方法详解
Jun 20 PHP
基于PHP创建Cookie数组的详解
Jul 03 PHP
PHP基于GD库的缩略图生成代码(支持jpg,gif,png格式)
Jun 19 PHP
windows7下安装php的php-ssh2扩展教程
Jul 04 PHP
PHP常用编译参数中文说明
Sep 27 PHP
PHP使用CURL模拟登录的方法
Jul 08 PHP
摘自织梦CMS的HTTP文件下载类
Aug 08 PHP
PHP按一定比例压缩图片的方法
Oct 12 PHP
PHP常见过waf webshell以及最简单的检测方法
May 21 PHP
laravel框架创建授权策略实例分析
Nov 22 PHP
浅谈PHP7中的一些小技巧
May 29 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
星际争霸 Starcraft 游戏介绍
2020/03/14 星际争霸
咖啡店都有些什么常规豆子呢?有什么风味在里面
2021/03/04 咖啡文化
PHP读取数据库并按照中文名称进行排序实现代码
2013/01/29 PHP
php 下载保存文件保存到本地的两种实现方法
2013/08/12 PHP
php 实现一个字符串加密解密的函数实例代码
2016/11/01 PHP
PHP获取当前执行php文件名的代码
2017/03/02 PHP
经验几则 推荐
2006/09/05 Javascript
js 取时间差去掉周六周日实现代码
2012/12/25 Javascript
jQuery计算textarea中文字数(剩余个数)的小程序
2013/11/28 Javascript
JS中判断null、undefined与NaN的方法
2014/03/24 Javascript
JavaScript过滤字符串中的中文与空格方法汇总
2016/03/07 Javascript
JS转换HTML转义符的方法
2016/08/24 Javascript
获取select的value、text值的简单示例(jquery与javascript)
2016/12/07 Javascript
详解webpack-dev-server使用方法
2018/09/14 Javascript
原生js实现trigger方法示例代码
2019/05/22 Javascript
layui多iframe页面控制定时器运行的方法
2019/09/05 Javascript
JavaScript接口实现方法实例分析
2020/05/16 Javascript
uniapp微信小程序实现一个页面多个倒计时
2020/11/01 Javascript
[09:43]DOTA2每周TOP10 精彩击杀集锦vol.5
2014/06/25 DOTA
Python写入CSV文件的方法
2015/07/08 Python
Python使用lambda表达式对字典排序操作示例
2019/07/25 Python
Python 实现大整数乘法算法的示例代码
2019/09/17 Python
TensorFlow 输出checkpoint 中的变量名与变量值方式
2020/02/11 Python
python如何求圆的面积
2020/07/01 Python
Python基于staticmethod装饰器标示静态方法
2020/10/17 Python
西班牙英格列斯百货英国官网:El Corte Inglés英国
2017/10/30 全球购物
Jimmy Choo美国官网:周仰杰鞋子品牌
2018/06/08 全球购物
Abbacino官网:包、钱包和女士配饰
2019/04/15 全球购物
英国国家美术馆商店:National Gallery
2019/05/01 全球购物
大学团支书的自我评价分享
2013/12/14 职场文书
保险公司晨会主持词
2014/03/22 职场文书
节能减排倡议书
2014/04/15 职场文书
面试必备的求职信
2014/05/25 职场文书
铣床操作工岗位职责
2014/06/13 职场文书
先进教师个人总结
2015/02/11 职场文书
python解决12306登录验证码的实现
2021/04/18 Python