【问题标题】:error resizeing images in a loop in codeigniter在codeigniter的循环中调整图像大小时出错
【发布时间】:2011-06-28 02:49:11
【问题描述】:

我在循环上传和调整图像大小时遇到​​问题。

谁能给我提供codeigniter代码的工作示例,以便在循环中同时上传和调整大小。

我想上传从表单上传的图片并调整其大小。将有超过 1 张图片,所以我必须循环上传它们。

我的代码首先上传图片然后调整它的大小。 1ts 图像已正确上传并调整大小,但在第二次循环期间,图像已上传但未调整大小。它抛出这个错误:

您的服务器不支持 GD 处理此类型所需的功能 图像。

我也试过清除功能

$this->image_lib->clear(); 

谁能帮忙

【问题讨论】:

    标签: codeigniter upload resize


    【解决方案1】:
    $config['image_library'] = 'gd2';
    
            $config['source_image'] = './assets/upload_images/A.jpg';
            $config['create_thumb'] = FALSE;
            $config['maintain_ratio'] = TRUE;
            $config['width']         = 1600;
            $config['height']       = 900;
            $config['new_image']       = './assets/upload_images/'.$randy;
    
    $this->load->library('image_lib', $config);
            $this->image_lib->initialize($config);
            $this->image_lib->resize();
             $this->image_lib->clear();
    

    我有同样的问题,但通过这段代码解决了这些问题。

    【讨论】:

    • 能否请您对此解决方案添加说明?
    【解决方案2】:

    这是来自我的图片库控制器的工作代码。该函数上传一批图片,调整大小并保存到数据库。

    public function create_photo_batch() {      
    $this->load->library('image_lib');
    $this->load->library('upload');
    
    // Get albums list for dropdown
    $this->data['albums']   = $this->gallery_m->get_albums_list();
    
    if(isset($_FILES['images']) && $_FILES['images']['size'] > 0) {
      $album_id = $this->input->post('albumid');
      $images = array();
      $ret = array();
    
      // Upload
      $files = $_FILES['images'];
      foreach ($files['name'] as $key => $image) {
        $_FILES['images[]']['name']= $files['name'][$key];
        $_FILES['images[]']['type']= $files['type'][$key];
        $_FILES['images[]']['tmp_name']= $files['tmp_name'][$key];
        $_FILES['images[]']['error']= $files['error'][$key];
        $_FILES['images[]']['size']= $files['size'][$key];
    
        $upload_config = array(
          'allowed_types' => 'jpg|jpeg|gif|png',
          'upload_path' => realpath(APPPATH . "../uploads/gallery"),
          'max_size'    => 5000,
          'remove_spaces' => TRUE,
          'file_name'   => md5(time())
        );
        $this->upload->initialize($upload_config);
    
        if ($this->upload->do_upload('images[]')) {
          $image_data = $this->upload->data();  
          $images[] = $image_data['file_name']; 
        } else {
          $this->session->set_flashdata('error', $this->upload->display_errors() );
          redirect('admin/gallery/create_photo_batch');
        }
      }
    
      // Resize
      foreach ($images as $image) {
            $resize_config = array(
                'source_image'      => realpath(APPPATH . '../uploads/gallery') .'/'. $image,
                'new_image'             => realpath(APPPATH . '../uploads/gallery/thumbs'),
                'maintain_ratio'    => TRUE,
                'width'                     => 500,
                'height'                    => 500
            );
            $this->image_lib->initialize($resize_config);
    
            if ( ! $this->image_lib->resize() ) {
          echo $this->image_lib->display_errors(); 
          die;
        }
            $this->image_lib->clear();
      }
    
      // Save to db
      foreach ($images as $image) {
        $ret[] = array(
          'AlbumID' => (int) $album_id, 
          'Url' => $image,
          'IsActive' => 1
        );
      }    
    
      $this->gallery_m->save_images($ret);
      redirect('admin/gallery/album/'.$album_id);       
    }
    
    //Load view
    $this->data['subview'] = 'admin/gallery/photo_upload_batch_view';
    $this->load->view('admin/_layout_main', $this->data);
    

    }

    【讨论】:

      【解决方案3】:

      不要多次加载 image_lib。在自动加载库中添加 image_lib 并更改

      $this->load->library('image_lib', $config);
      

      $this->image_lib->initialize($config);
      

      【讨论】:

        【解决方案4】:

        我遇到了同样的问题,但这似乎有效:

            // Do upload
            if (! $this->upload->do_upload($image_name)) {
                // return errors
                 return array('errors' => $this->upload->display_errors());
            }
        
            $data = $this->upload->data();
        
            $config_manip = array(
                'image_library' => 'gd2',
                'source_image' => "./assets/uploads/{$data['file_name']}",
                'new_image' => "./assets/uploads/thumbs/{$data['file_name']}",
                'create_thumb' => true,
                'thumb_marker' => '',
                'maintain_ratio' => true,
                'width' => 140,
                'height' => 140
            );
            // Create thumbnail
            $this->load->library('image_lib');
            $this->image_lib->resize();
            $this->image_lib->clear();
            $this->image_lib->initialize($config_manip);
        
            if ( ! $this->image_lib->resize()){
                return array('errors' => $this->image_lib->display_errors());
            }
        

        请注意创建缩略图: 加载库, 调整图像大小, 清除, 初始化配置

        我在初始化之后进行了清除,这导致了您遇到的相同错误。

        【讨论】:

        • thnx man,它解决了我的问题,我花了一天时间,我想裁剪 4 种不同尺寸的图像但找不到解决方案,然后我为此使用了一个循环并将其设置为你的方式,它就像魔法一样,很高兴:)
        【解决方案5】:

        您的错误消息表明问题不是循环,而是第二个文件与第一个文件的文件类型不同。并且底层服务器没有安装处理该文件类型所需的库 (http://www.libgd.org/Main_Page)。

        【讨论】:

        • 两张图片都是 jpeg。我尝试一张一张上传两张图片,它可以工作。它只是不能循环工作。
        猜你喜欢
        • 1970-01-01
        • 2018-02-14
        • 2012-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-18
        相关资源
        最近更新 更多