2014-10-11 93 views
0

我想让用户上传他们的个人资料图片时,它会将其大小调整为180x180的大小以适合个人资料图片框。然后,我希望它也创建图像的缩略图,所以我可以用它的帖子等,这是我的代码现在所拥有的:CodeIgniter - 缩放图像并创建其他缩略图

function do_upload_profilepicture() 
{ 

    $this->load->model('model_users'); 
    $userID = $this->model_users->getUserID($this->session->userdata('username')); 

    $config['upload_path'] = './img/profilepictures/'; 
    $config['allowed_types'] = 'jpg|png'; 
    $config['overwrite'] = TRUE; 
    $config['file_name'] = $userID; 
    $config['max_size'] = '500'; 
    $config['max_width'] = '1920'; 
    $config['max_height'] = '1028'; 

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


    if (! $this->upload->do_upload()) 
    { 
     $error = array('error' => $this->upload->display_errors()); 

     $this->load->view('upload_profilepic_form', $error); 
    } 
    else 
    { 
     $upload_data = $this->upload->data(); 

     $resize['image_library'] = 'gd2'; 
     $resize['source_image'] = $upload_data['full_path']; 
     $resize['maintain_ratio'] = FALSE; 
     $resize['width']  = 180; 
     $resize['height'] = 180; 

     $this->load->library('image_lib', $resize); 
     $this->image_lib->resize();  
     $this->model_users->setProfilePic($userID, $upload_data['orig_name']); 

     redirect('upload/create_thumb/' . $upload_data['orig_name']); 
    } 
} 

function create_thumb() { 
    $this->load->model('model_users'); 
    $userID = $this->model_users->getUserID($this->session->userdata('username')); 

    $imgname = $this->model_users->parseURL($_SERVER['REQUEST_URI'], 1); 

    $source_path = $imgsrc; 
    $config_manip = array(
     'image_library' => 'gd2', 
     'source_image' => 'img/profilepictures/' . $imgname, 
     'new_image' => base_url() . 'img/profilepictures/thumbs/' . $imgname, 
     'maintain_ratio' => TRUE, 
     'width' => 50, 
     'height' => 50 
    ); 
    $this->load->library('image_lib', $config_manip); 

    if (!$this->image_lib->resize()) { 
     echo $this->image_lib->display_errors(); 
    } 
    // clear // 
    $this->image_lib->clear(); 

     redirect('userprofile/home/' . $userID); 
    } 

} 

什么情况是它不是创建新的文件,这是为什么这个?有没有更简单的方法来做到这一点?

回答

0

在代码中发现的一个问题是,您只是为了创建缩略图而重定向用户,您可以在步骤中调用do_upload_profilepicture方法中的该方法并传递图像名称,无需一次又一次重定向。

function do_upload_profilepicture() 
{ 

    $this->load->model('model_users'); 
    $userID = $this->model_users->getUserID($this->session->userdata('username')); 

    $config['upload_path'] = './img/profilepictures/'; 
    $config['allowed_types'] = 'jpg|png'; 
    $config['overwrite'] = TRUE; 
    $config['file_name'] = $userID; 
    $config['max_size'] = '500'; 
    $config['max_width'] = '1920'; 
    $config['max_height'] = '1028'; 

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


    if (! $this->upload->do_upload()) 
    { 
     $error = array('error' => $this->upload->display_errors()); 

     $this->load->view('upload_profilepic_form', $error); 
    } 
    else 
    { 
     $upload_data = $this->upload->data(); 

     $resize['image_library'] = 'gd2'; 
     $resize['source_image'] = $upload_data['full_path']; 
     $resize['maintain_ratio'] = FALSE; 
     $resize['width']  = 180; 
     $resize['height'] = 180; 

     $this->load->library('image_lib', $resize); 
     $this->image_lib->resize();  
     $this->image_lib->clear(); 
     $this->model_users->setProfilePic($userID, $upload_data['orig_name']); 


     $this->create_thumb($upload_data['orig_name']); 

     redirect('userprofile/home/' . $userID); 
    } 
} 

function create_thumb($imgname) { 

    $source_path = $imgsrc; 
    $config_manip = array(
     'image_library' => 'gd2', 
     'source_image' => 'img/profilepictures/' . $imgname, 
     'new_image' => 'img/profilepictures/thumbs/' . $imgname, 
     'maintain_ratio' => TRUE, 
     'width' => 50, 
     'height' => 50 
    ); 
    $this->load->library('image_lib', $config_manip); 

    if (!$this->image_lib->resize()) { 
     echo $this->image_lib->display_errors(); 
    } 
    // clear // 
    $this->image_lib->clear(); 

    } 

} 

你也在new_image中使用base_url拇指你需要给文件路径不是http路径。我建议你使用这个库在codeigniter中动态创建图像codeigniter-advanced-images