2011-01-23 6 views
0

Привет, мне было интересно, можете ли вы мне помочь, в основном я использую Codeigniter, и я хочу иметь возможность загружать изображение и сохранять его в трех разных папках в виде трех разных размеров, однако они должны соответствовать точные размеры, которые я указываю, не выглядя растянутыми или искаженными.Изменение размера и обрезка в Codeigniter

Это мой контроллер - если бы вы могли мне помочь, я был бы очень благодарен.

$config['upload_path'] = $_SERVER['DOCUMENT_ROOT'].'/website/uploads/original/'; 
$config['allowed_types'] = 'gif|jpg|png|bmp|jpeg'; 

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

if(!$this->upload->do_upload()) 
{ 
    $error = array('error' => $this->upload->display_errors()); 
    $this->load->view('submit', $error); 
}  
else { 
    $data['upload_data'] = array('upload_data' => $this->upload->data()); 
    $file_name = $this->upload->file_name; 

    list($image_width, $image_height) = getimagesize($_SERVER['DOCUMENT_ROOT'].'/website/uploads/original/'.$file_name); 

    // create small size 
    $config['image_library'] = 'GD2'; 
    $config['source_image'] = $_SERVER['DOCUMENT_ROOT'].'/website/uploads/original/'.$file_name; 
    $config['new_image'] = $_SERVER['DOCUMENT_ROOT'].'/website/uploads/small/'.$file_name; 
    $config['maintain_ratio'] = TRUE; 
    $config['width'] = 181; 
    $config['height'] = 115; 
    $config['master_dim'] = 'width'; 

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

    if($image_width >= $config['width'] AND $image_height >= $config['height']) 
    { 
     if (!$this->image_lib->resize()) 
     { 
     echo $this->image_lib->display_errors(); 
     } else { 
     if(file_exists($_SERVER['DOCUMENT_ROOT'].'/website/uploads/small/'.$file_name)) 
     { 
      list($image_width, $image_height) = getimagesize($_SERVER['DOCUMENT_ROOT'].'/website/uploads/small/'.$file_name); 
      if($image_height > '115') 
      { 
      $config['source_image'] = $_SERVER['DOCUMENT_ROOT'].'/website/uploads/small/'.$file_name; 
      $y_axis = $image_height - 115; 
      $config['y_axis'] = $y_axis; 
      $config['x_axis'] = 181; 
      $this->image_lib->initialize($config); 
      if (!$this->image_lib->crop()) 
       { 
        echo $this->image_lib->display_errors(); 
       } else { 
        echo "cropped";  
      } 
     } 
     } 
    } 
} 

ответ

2

Я не уверен, если у Вас возникли сложности с получением фактической библиотеки изображений Сайзер работать, или вы просто хотите знать, как сохранить в трех разных местах с разными размерами ... Предположим, что вы хотите сделайте последнее, вы, вероятно, захотите просто создать функцию, которая делает материал для определения размера изображения для вас, а затем передать различную высоту/ширину/имя каталога/и т. д. что вы хотите ... Не тестировали, но это выглядело бы примерно так:

function your_function() { 

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

if(!$this->upload->do_upload()) 
{ 
    $error = array('error' => $this->upload->display_errors()); 
    $this->load->view('submit', $error); 
}  
else 
{ 
    $data['upload_data'] = array('upload_data' => $this->upload->data()); 
    $file_name = $this->upload->file_name; 

    list($image_width, $image_height) = getimagesize($_SERVER['DOCUMENT_ROOT'].'/website/uploads/original/'.$file_name); 

    $this->image_resize('115', '181', 'small', $file_name, $image_width, $image_height);  
    $this->image_resize('300', '400', 'medium', $file_name, $image_width, $image_height); 
    $this->image_resize('600', '500', 'large', $file_name, $image_width, $image_height);   
} 
} 

private function image_resize($height, $width, $path, $file_name, $image_width, $image_height) 
{ 
    // Resize image settings 
    $config['image_library'] = 'GD2'; 
    $config['source_image'] = $_SERVER['DOCUMENT_ROOT'].'/website/uploads/original/'.$file_name; 
    $config['new_image'] = $_SERVER['DOCUMENT_ROOT']."/website/uploads/$path/$file_name"; 
    $config['maintain_ratio'] = TRUE; 
    $config['width'] = $width; 
    $config['height'] = $height; 
    $config['master_dim'] = 'width'; 

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

    if($image_width >= $config['width'] AND $image_height >= $config['height']) 
    { 
     if (!$this->image_lib->resize()) 
     { 
      echo $this->image_lib->display_errors(); 
     } else { 
      if(file_exists($_SERVER['DOCUMENT_ROOT']."/website/uploads/$path/$file_name")) 
      { 
       list($image_width, $image_height) = getimagesize($_SERVER['DOCUMENT_ROOT']."/website/uploads/$path$file_name"); 
       if($image_height > '115') 
       { 
        $config['source_image'] = $_SERVER['DOCUMENT_ROOT'].'/website/uploads/small/'.$file_name; 
        $y_axis = $image_height - 115; 
        $config['y_axis'] = $y_axis; 
        $config['x_axis'] = 181; 
        $this->image_lib->initialize($config); 
        if (!$this->image_lib->crop()){ 
         echo $this->image_lib->display_errors(); 
        } else { 
         echo "cropped";  
        } 
       } 
      }  
     } 
    } 
} 
Смежные вопросы