【问题标题】:Multiple Image Resizes at once in Codeigniter , won't work在 Codeigniter 中一次调整多个图像大小,不起作用
【发布时间】:2012-04-11 23:04:32
【问题描述】:

我正在尝试上传图像并在同一函数中以不同尺寸重新调整它们的大小。但是发生的情况是,只有一个重新调整大小有效,而其他的则无效。我的代码是:

    function do_upload()
{
    $this_user = $this->auth->info;if(!is_dir('./uploads/'.$this_user->username)){
        mkdir('./uploads/'.$this_user->username);
        mkdir('./uploads/'.$this_user->username.'/photos');
        mkdir('./uploads/'.$this_user->username.'/photos/master');
        mkdir('./uploads/'.$this_user->username.'/photos/small');
        mkdir('./uploads/'.$this_user->username.'/photos/medium');
        mkdir('./uploads/'.$this_user->username.'/photos/large');
        mkdir('./uploads/'.$this_user->username.'/photos/xlarge');
    }
    $config['upload_path'] = './uploads/'.$this_user->username.'/photos/master/';
    $config['allowed_types'] = 'gif|jpg';

    $title = $this->input->post('title');
    $this->load->library('upload', $config);
    if ( ! $this->upload->do_upload())
    {
        echo '<div id="status">error</div>';
        echo '<div id="message">'. $this->upload->display_errors() .'</div>';
    }
    else
    {
        $data = array('upload_data' => $this->upload->data());
        //resizing begins
            $image_width = $data['upload_data']['image_width'];
            $image_height = $data['upload_data']['image_height'];
            $full_path = $data['upload_data']['full_path'];
            //checking for width
            if($image_width>5000){
                $config['image_library'] = 'gd2';
                $config['source_image'] = $full_path;
                //$config['create_thumb'] = TRUE;
                $config['maintain_ratio'] = TRUE;
                $config['width'] = 5000;
                //$config['height'] = 50;
                $config['new_image'] = './uploads/'.$this_user->username.'/photos/xlarge';
                $this->load->library('image_lib', $config);
                $this->image_lib->resize();
            }
            if($image_width>=4500){
                $config['image_library'] = 'gd2';
                $config['source_image'] = $full_path;
                //$config['create_thumb'] = TRUE;
                $config['maintain_ratio'] = TRUE;
                $config['width'] = 4500;
                //$config['height'] = 50;
                $config['new_image'] = './uploads/'.$this_user->username.'/photos/large';
                $this->load->library('image_lib', $config);
                $this->image_lib->resize();
            }
            if($image_width>=2000){
                $config['image_library'] = 'gd2';
                $config['source_image'] = $full_path;
                //$config['create_thumb'] = TRUE;
                $config['maintain_ratio'] = TRUE;
                $config['width'] = 2000;
                //$config['height'] = 50;
                $config['new_image'] = './uploads/'.$this_user->username.'/photos/medium';
                $this->load->library('image_lib', $config);
                $this->image_lib->resize();
            }
            if($image_width>=800){
                $config['image_library'] = 'gd2';
                $config['source_image'] = $full_path;
                //$config['create_thumb'] = TRUE;
                $config['maintain_ratio'] = TRUE;
                $config['width'] = 800;
                //$config['height'] = 50;
                $config['new_image'] = './uploads/'.$this_user->username.'/photos/small';
                $this->load->library('image_lib', $config);
                $this->image_lib->resize();
            }
        //resizing ends
        echo '<div id="status">success</div>';
        //then output your message (optional)
        echo '<div id="message">'. $data['upload_data']['file_name'].$this->input->post('type').' Successfully uploaded.</div>';
        //pass the data to js
        echo '<div id="upload_data">'. json_encode($data) . '</div>';

    }
}

我在这里做错了什么?

【问题讨论】:

    标签: php codeigniter image-manipulation


    【解决方案1】:

    您需要确保调用$this-&gt;image_lib-&gt;clear();,因为它会重置图像处理类的初始化。见:http://codeigniter.com/user_guide/libraries/image_lib.html

    【讨论】:

      【解决方案2】:

      这实际上对我有用。我正在做的是多次加载库。我应该加载一次库并为每个重新调整大小初始化配置。这是对我有用的代码。

          function do_upload()
      {
          $this_user = $this->auth->info;
          if(!is_dir('./uploads/'.$this_user->username)){
              mkdir('./uploads/'.$this_user->username);
              mkdir('./uploads/'.$this_user->username.'/photos');
              mkdir('./uploads/'.$this_user->username.'/photos/master');
              mkdir('./uploads/'.$this_user->username.'/photos/small');
              mkdir('./uploads/'.$this_user->username.'/photos/medium');
              mkdir('./uploads/'.$this_user->username.'/photos/large');
              mkdir('./uploads/'.$this_user->username.'/photos/xlarge');
          }
          $config['upload_path'] = './uploads/'.$this_user->username.'/photos/master/';
          $config['allowed_types'] = 'gif|jpg';
          $title = $this->input->post('title');
          $this->load->library('upload', $config);
          if ( ! $this->upload->do_upload())
          {
              echo '<div id="status">error</div>';
              echo '<div id="message">'. $this->upload->display_errors() .'</div>';
          }
          else
          {
              $data = array('upload_data' => $this->upload->data());
              //resizing begins
                  $image_width = $data['upload_data']['image_width'];
                  $image_height = $data['upload_data']['image_height'];
                  $full_path = $data['upload_data']['full_path'];
                  //checking for width
                  $this->load->library('image_lib');
                  if($image_width>5000){
                      $config['source_image'] = $full_path;
                      $config['maintain_ratio'] = TRUE;
                      $config['width'] = 5000;
                      $config['new_image'] = './uploads/'.$this_user->username.'/photos/xlarge';
                      $this->image_lib->initialize($config);
                      $this->image_lib->resize();
                      $this->image_lib->clear();
                      $aa = 'xlarge ';
                  }
                  if($image_width>=4500){
                      $config['source_image'] = $full_path;
                      $config['maintain_ratio'] = TRUE;
                      $config['width'] = 4500;
                      $config['new_image'] = './uploads/'.$this_user->username.'/photos/large';
                      $this->image_lib->initialize($config);
                      $this->image_lib->resize();
                      $this->image_lib->clear();
                      $aa .= 'large';
                  }
                  if($image_width>=2000){
                      $config['source_image'] = $full_path;
                      $config['maintain_ratio'] = TRUE;
                      $config['width'] = 2000;
                      $config['new_image'] = './uploads/'.$this_user->username.'/photos/medium';
                      $this->image_lib->initialize($config);
                      $this->image_lib->resize();
                      $this->image_lib->clear();
                      $aa .= 'medium';
                  }
                  if($image_width>=800){
                      $config['source_image'] = $full_path;
                      $config['maintain_ratio'] = TRUE;
                      $config['width'] = 800;
                      $config['new_image'] = './uploads/'.$this_user->username.'/photos/small';
                      $this->image_lib->initialize($config);
                      $this->image_lib->resize();
                      $this->image_lib->clear();
                      $aa .= 'small';
                  }
              //resizing ends
              echo '<div id="status">success</div>';
              //then output your message (optional)
              echo '<div id="message">'. $data['upload_data']['file_name'].$aa.' Successfully uploaded.</div>';
              //pass the data to js
              echo '<div id="upload_data">'. json_encode($data) . '</div>';
      
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-29
        • 2016-12-31
        • 2023-03-31
        • 2016-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-11
        相关资源
        最近更新 更多