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

 更新时间:2018年06月29日 09:05:56   作者:WhoAmMe  
这篇文章主要介绍了CI框架实现递归生成文件路径并重新生成图片功能,涉及CodeIgniter框架自定义图片控制器类实现文件目录递归以及调用图片处理扩展类进行图片生成相关操作技巧,需要的朋友可以参考下

本文实例讲述了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程序设计有所帮助。

相关文章

  • php和腾讯直播的实现代码

    php和腾讯直播的实现代码

    这篇文章主要介绍了php和腾讯直播的实现代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • thinkphp模板赋值与替换实例简述

    thinkphp模板赋值与替换实例简述

    这篇文章主要介绍了thinkphp模板赋值与替换的方法,以实例形式简述了模板复制的两种简单方法,以及模板替换中的特殊字符串说明与用法实例,是使用频率比较高的技巧,需要的朋友可以参考下
    2014-11-11
  • 基于PHP微信红包的算法探讨

    基于PHP微信红包的算法探讨

    微信群发红包大家都使用过吧,但是到底如何实现微信红包群发?这篇文章就为大家详细的揭晓答案,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • php实例分享之mysql数据备份

    php实例分享之mysql数据备份

    本代码实现了表结构和数据完全分开,默认有一个文件会记录所有表的结构,然后表中数据的备份 如果超过分卷的大小则会分成多个文件,不然则一个文件
    2014-05-05
  • Laravel认证原理以及完全自定义认证详解

    Laravel认证原理以及完全自定义认证详解

    最近在学习laravel框架,所以下面这篇文章主要给大家介绍了关于Laravel认证原理以及完全自定义认证的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
    2018-07-07
  • PHPStudy hosts文件可能不存在或被阻止打开及同步hosts失败问题

    PHPStudy hosts文件可能不存在或被阻止打开及同步hosts失败问题

    这篇文章主要介绍了PHPStudy hosts文件可能不存在或被阻止打开,同步hosts失败,本文分步骤给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • yii2.0整合阿里云oss上传单个文件的示例

    yii2.0整合阿里云oss上传单个文件的示例

    本篇文章主要介绍了yii2.0整合阿里云oss上传单个文件的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • 浅析PHP中strlen和mb_strlen的区别

    浅析PHP中strlen和mb_strlen的区别

    在php中常见的计算字符串长度的函数有:strlen和mb_strlen.当字符全是英文字符的时候,两者是一样。这里主要比较一下,中英文混排的时候,两个计算结果。
    2014-08-08
  • Laravel中简约却不简单的Macroable宏指令详解

    Laravel中简约却不简单的Macroable宏指令详解

    这篇文章主要给大家介绍了关于Laravel中简约却不简单的Macroable宏指令的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧
    2018-07-07
  • 使用ThinkPHP的自动完成实现无限级分类实例详解

    使用ThinkPHP的自动完成实现无限级分类实例详解

    这篇文章主要介绍了使用ThinkPHP的自动完成实现无限级分类功能,本文通过图文并茂的方式给大家展示,介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起看看吧
    2016-09-09

最新评论