错误调整codeigniter中循环中的图像大小

时间:2011-02-16 05:14:19

标签: codeigniter upload resize

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

任何人都可以请我提供codeigniter代码的工作示例,以便在循环中同时上传和调整大小。

我想上传和调整从表单上传的图片。将有超过1个图像,所以我必须循环上传它们。

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

  

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

我也尝试了清除功能

$this->image_lib->clear(); 

任何人都可以请帮助

5 个答案:

答案 0 :(得分:13)

多次加载image_lib。在autoload libs中添加image_lib并更改

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

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

答案 1 :(得分:6)

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

    // 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());
    }

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

我在初始化之后把它清理掉了,导致你得到同样的错误。

答案 2 :(得分: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 :(得分:0)

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

答案 4 :(得分:0)

$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();

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