CI框架封装的常用图像处理方法(缩略图,水印,旋转,上传等)
author:一佰互联 2019-04-26   click:198

本文实例讲述了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:WindowsFontsvrinda.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相关内容感兴趣的读者可查看本站专题:《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《php优秀开发框架总结》、《ThinkPHP入门教程》、《ThinkPHP常用方法总结》、《Zend FrameWork框架入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

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