0

Hi I was wondering if you could help me, basically I am using Codeigniter and I want to be able to upload an image and save it to three different folders as three different sizes, however, they must fit the exact dimensions I specify without looking stretched or distorted.

This is my controller - if you could help me I would be most grateful.

$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";    
           }
         }
      }
   }
}  
wonderwoman
  • 39
  • 1
  • 8

1 Answers1

2

I'm not sure if you were having trouble getting the actual image sizer library to work, or whether you just want to know how to save to three different places with different sizes... assuming you want to do the latter, you probably want to just create a function that does the image sizing stuff for you and then pass in the different height/width/name of directory/etc. that you want... Haven't tested it but it would look something like this:

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";    
                    }
                }
            }       
        }
    }
}
tgriesser
  • 2,808
  • 1
  • 22
  • 22