CI框架实现递归生成文件路径并重新生成图片功能

本文实例讲述了CI框架实现递归生成文件路径并重新生成图片功能。分享给大家供大家参考,具体如下:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
set_time_limit(0);
class Img_build extends CI_Controller{
  private static $img_path =  'upload_old/';
  private static $new_path =  'upload/';
  function __construct()
  {
      parent::__construct();
  }
  /**
   * 获取需要读取的路径的信息
   * $map = array (
   *         '路径名' => array (文件1, 文件2, 文件3)
   *     )
   */
  public function index()
  {
    $this->load->helper('directory');
    //读取路径的信息
    $map = directory_map(self::$img_path, FALSE, TRUE);
    echo "<pre>";
    print_r($map);
    echo "</pre>";
    if(!empty($map) && is_array($map))
    {
      $this->build_path($map);
    }
  }
  /**
   * 递归生成相应的路径
   * @param array $map
   */
  private function build_path($map = array())
  {
    if(!file_exists(self::$new_path))
    {
      mkdir(self::$new_path, 0777);
    }
    foreach($map as $key => $val)
    {
      $old_img_path = self::$img_path;
      $old_tmp_path = self::$img_path.$key.'/';
      $new_img_path = self::$new_path;
      $new_tmp_path = self::$new_path.$key.'/';
      if(is_dir($old_tmp_path))
      {
        //echo $new_tmp_path;
        if(!file_exists($new_tmp_path))
        {
          mkdir($new_tmp_path, 0777);
        }
        self::$img_path = $old_tmp_path;
        self::$new_path = $new_tmp_path;
        echo 'path:'.self::$img_path."<hr>";
        $this->load->helper('directory');
        $c_map = directory_map($old_tmp_path, FALSE, TRUE);
//           echo "<pre>";
//           print_r($c_map);
//           echo "</pre>";
        if(!empty($c_map) && is_array($c_map))
        {
          $this->build_path($c_map);
        }
      }
      if(is_file(self::$img_path.$val))
      {
        echo 'file:'.self::$img_path.$val."<hr>";
        $img = array();
        $img['source_image'] = self::$img_path.$val;
        $img['new_image']  = self::$new_path.$val;
        $this->build_img($img);
      }
      self::$img_path = $old_img_path;
      self::$new_path = $new_img_path;
    }
  }
  /**
   * 根据原图片生成新的图片
   * @param array $img
   * $img = array('source_image'=> '原图片的路径', 'new_image' => '新图片路径')
   */
  private function build_img($img = array())
  {
    if(!is_array($img) || empty($img))
    {
      return FALSE;
    }
    //设置图像生成参数
    $config['image_library']  = 'gd2';  //设置图像库
    $config['source_image']   = $img['source_image']; //设置原始图像的名字/路径
    $config['create_thumb']   = FALSE;  //让图像处理函数产生一个预览图像
    $config['maintain_ratio']  = TRUE; //指定是否在缩放或使用硬值的时候使图像保持原始的纵横比例
    //$config['quality']     = 200;
    $img_info = array();
    $img_info = getimagesize($config['source_image']);//获取图片的尺寸
    if(is_array($img_info) && !empty($img_info))
    {
      $config['width']      = $img_info[0];
      $config['height']      = $img_info[1];
    }
    $config['new_image']    = $img['new_image']; //新图片路径
    $this->load->library('image_lib', $config); //加载图片处理类
    $this->image_lib->initialize($config); //调用
    if ( ! $this->image_lib->resize())
    {
      echo $this->image_lib->display_errors();
    }
    $this->image_lib->clear(); //清除图片处理参数
  }
}
?>

更多关于CodeIgniter相关内容感兴趣的读者可查看本站专题:《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《php优秀开发框架总结》、《ThinkPHP入门教程》、《ThinkPHP常用方法总结》、《Zend FrameWork框架入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

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

(0)

相关推荐

  • CI(CodeIgniter)框架实现图片上传的方法

    本文实例讲述了CodeIgniter框架实现图片上传的方法.分享给大家供大家参考,具体如下: 对于图片上传这种老生常谈的问题,在此我不得不再次重复一次,因为对于这框架毕竟有些地方值得自己学习与借鉴,这篇文章我是借助官方文档来写的,但有些地方任然需要标明一下. 下面我们来看看图片上传吧.首先在"./application/views/"文件夹下创一个视图文件:text.php,代码如下: <html> <head> <title>Upload Form

  • codeigniter上传图片不能正确识别图片类型问题解决方法

    在用 codeigniter 的上传类上传图片的时候,明明是 jpg 格式图片,但是 ci 始终识别成 application/octet-stream 类型,从而导致上传失败,搜集了下资料,解决方法如下: 在 php.ini 中开启 fileinfo 扩展来获取正确的类型: 复制代码 代码如下: //windows extension = php_fileinfo.dll //linux extension = fileinfo.so 注:关于fileinfo PHP官方推荐mime_cont

  • php基于CodeIgniter实现图片上传、剪切功能

    本文实例为大家分享了codeigniter 图片上传.剪切,控制器类,供大家参考,具体内容如下 <?php defined('BASEPATH') OR exit('No direct script access allowed'); class Index extends MY_Controller { function __construct(){ parent::__construct(); $this->load->helper(array('form', 'url')); }

  • 使用CodeIgniter的类库做图片上传

    CodeIgniter的文件上传类允许文件被上传.您可以设置指定上传某类型的文件及指定大小的文件. 上传文件普遍的过程: 一个上传文件用的表单,允许用户选择一个文件并上传它.当这个表单被提交,该文件被上传到指定的目录.同时,该文件将被验证是否符合您设定的要求.一旦文件上传成功,还要返回一个上传成功的确认窗口. 下面是表单: 复制代码 代码如下: <form method="post" action="<?=base_url()?>admin/img_uplo

  • Codeigniter实现智能裁剪图片的方法

    一副1024*768大小的图片,裁剪到240*240大小,裁剪后不失真,尽可能保留图片主题含义. 我使用到的方法: 1. 先将图片等比例缩略到可以裁剪的大小: 如果是宽幅图片,则按高度等比例缩放到高度 = 240px,窄幅图片(高度大于宽度)则按宽度等比例缩放: 2. 按长宽格式居中裁剪: 保留缩略后的图片中间部分: 复制代码 代码如下: $this->load->library('image_lib');                list($width, $height) = geti

  • CI框架文件上传类及图像处理类用法分析

    本文实例讲述了CI框架文件上传类及图像处理类用法.分享给大家供大家参考,具体如下: //列表页banner图片 public function edit_list_page_banner($category_id=""){ $category_id= empty($category_id)?$_POST["category_id"]:$category_id; //上传图片 if(isset($_POST["key"]) && $

  • CI框架无限级分类+递归的实现代码

    CI是什么? CodeIgniter是一个轻量级但功能强大的PHP框架,基于MVC设计模式,提供了一套丰富的类库,简单易学,高效实用. 下面看下CI框架无限级分类+递归的实现代码,具体代码如下所示: //无级分类+递归 public function digui(){ $crr = $this->db->get('category')->result_array(); $list['type'] = $this->nolimit($crr,0,0); $this->load-

  • CodeIgniter实现从网站抓取图片并自动下载到文件夹里的方法

    本文实例讲述了CodeIgniter实现从网站抓取图片并自动下载到文件夹里的方法.分享给大家供大家参考.具体如下: 因为某网站看图比较坑爹,要一页一页的翻页....所以....就写了这么个东西 (我是产品不是程序员)运行速度简直无法忍受,而且经常会有错误发生,所以希望大家帮忙改进(PHP). 当然也欢迎看到PYTHON,GOLANG的版本~~^_^ 1. controllers: $this->load->helper('date'); $this->load->helper('p

  • CI框架实现优化文件上传及多文件上传的方法

    本文实例分析了CI框架实现优化文件上传及多文件上传的方法.分享给大家供大家参考,具体如下: 最近一直在研究Codeigniter框架,开发项目写到文件上传的时候发现大部分程序员使用Codeigniter框架的文件上传类编写上传方法的时候写的都存在这代码冗余(或者说代码重复利用率低.比较消耗资源.)故而我研究出一个稍微优化一点的上传方法.并且在查找资料时发现,Codeigniter框架同时上传多个文件比较困难,所以在优化方法的同时我又研究了一下如何使用Codeigniter框架实现同时上传多个文件

  • CI框架实现递归生成文件路径并重新生成图片功能

    本文实例讲述了CI框架实现递归生成文件路径并重新生成图片功能.分享给大家供大家参考,具体如下: <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); set_time_limit(0); class Img_build extends CI_Controller{ private static $img_path = 'upload_old/'; private static $new_path =

  • springboot中生成文件路径的问题及解决方法

    目录 springboot生成文件路径 举例 springboot创建错误(路径) 解决 springboot生成文件路径 在进行 springboot 项目开发以及打包为 jar 包发布时, 可能会有两种情况下生成文件路径不一致的问题, 有一种获取路径的方法可以使两种环境下都可以正确获取到项目或jar包的根目录 举例 String root = System.getProperty("user.dir"); String path = root +"\\out.txt&qu

  • FSO+递归生成文件列表(xml)

    本来生成这个xml文档是为了开发一个ftp的搜索,后来由于没有资料参考怎么搜索xml文档,也就放弃了.其中最重要的是递归的算法.生成文件列表的速度很快.这个程序可以用于生成播放列表之类的东东.需要IIS的FSO组件支持.生成类似下面的XML文档 <?xml version="1.0" encoding="gb2312"?> <ftp ip="10.1.228.228"> <DIR path="Game&qu

  • 一个带采集远程文章内容,保存图片,生成文件等完整的采集功能

    复制代码 代码如下: '================================================== '函数名:GetHttpPage '作 用:获取网页源码 '参 数:HttpUrl ------网页地址 '================================================== Function GetHttpPage(HttpUrl) If IsNull(HttpUrl)=True Or Len(HttpUrl)<18 Or HttpUr

  • C#使用浏览按钮获得文件路径和文件夹路径的方法

    本文实例讲述了C#使用浏览按钮获得文件路径和文件夹路径的方法.分享给大家供大家参考,具体如下: 生成文件夹路径 private void btnChoose_Click(object sender, EventArgs e) { using (OpenFileDialog dialog = new OpenFileDialog()) { dialog.Multiselect = true; if (dialog.ShowDialog() == DialogResult.OK) { try { t

  • php ci框架中加载css和js文件失败的解决方法

    在将html页面整合到ci框架里面的时候,加载css和js失败,弄了半天发现ci框架是入口的框架,对框架中文件的所有请求都需要经过index.php处理完成,当加载外部的css和js文件的时候要使用base_url()函数处理外部的链接. 比如: 在config配置文件中的base_url为:" localhost:8080/项目名称/ " 在控制器中访问application/resource/aaa.js文件 相对路径<script src= "resource/a

  • CI框架学习笔记(二) -入口文件index.php

    上一节(CI框架学习笔记(一) - 环境安装.基本术语和框架流程)中,我们提到了CI框架的基本流程,这里再次贴出流程图,以备参考: 作为CI框架的入口文件,源码阅读,自然由此开始.在源码阅读的过程中,我们并不会逐行进行解释,而只解释核心的功能和实现. 1. 设置应用程序环境 define('ENVIRONMENT', 'development'); 这里的development可以是任何你喜欢的环境名称(比如dev,再如test),相对应的,你要在下面的switch case代码块中,对设定的环

  • php ci框架中加载css和js文件失败的原因及解决方法

    在将html页面整合到ci框架里面的时候,加载css和js失败,弄了半天发现ci框架是入口的框架, 对框架中文件的所有请求都需要经过index.php处理完成,当加载外部的css和js文件的时候要使 用base_url()函数处理外部的链接. 比如: 在config配置文件中的base_url为:" localhost:8080/项目名称/ " 在控制器中访问application/resource/aaa.js文件 相对路径<script src= "resource

随机推荐