I have spent days trying to make this work based on the examples in the documentation but I am missing something or I am just STUPID!
I have a CMS application where users upload an image for display in a very fixed layout. We do not want to limit the file size of the uploaded image but would rather "process" it after it arrives.
The image needs to be 615px wide but some of the images uploaded directly from digital cameras are 2500X2000 and bigger so this is CRITICAL.
I pieced together the code from the manual and the image is successfully being uploaded to a folder within the CMS app. However, the image is NOT being resized.
If I ever get it to re-size, my plan is to present the image to the user for cropping using jCrop (the final image HAS to be 615X275 and it probably has to be cropped for height after resizing) and then use codeigniter to FTP the image to their site's amenities folder using the original name.
I will appreciate any help in this matter!
Here's my code:
function do_feature_upload() { $imageName = $this->uri->segment(3); //echo $imageName; // Where the file is going to be placed $config['upload_path'] = "./uploads/".$_SESSION['dbPropNumber']; $config['allowed_types'] = 'jpg|jpeg'; $config['max_size'] = '0'; $config['file_name'] = $imageName.'.jpg'; $config['overwrite'] = 'TRUE'; $this->load->library('upload', $config); if ( ! $this->upload->do_upload()) { $error = array('error' => $this->upload->display_errors()); $error['propertyDropdown'] = $_SESSION['propertyDropdown']; $error['username'] = $_SESSION['username']; $error['dbPropNumber'] = $_SESSION['dbPropNumber']; $error['propertyName'] = $this->content->getPropertyName($_SESSION['dbPropNumber']); $this->load->view('upload_AmenityImage', $error); } else { $image_data = $this->upload->data(); $origWidth = $image_data['image_width']; $origHeight = $image_data['image_height']; $newWidth = 615; $newHeight = $newWidth*$origHeight/$origWidth; $resize = array( 'image_library'=>'gd2', 'source_image'=>base_url().'uploads/'.$_SESSION['dbPropNumber'].'/'.$imageName.'.jpg', 'new_image'=>base_url().'uploads/'.$_SESSION['dbPropNumber'].'/'.$imageName.'1.jpg', 'create_thumb' => FALSE, 'maintain_ratio'=>FALSE, 'width'=>$newWidth, 'height'=>$newHeight ); $this->load->library('image_lib',$resize); $this->image_lib->resize(); $data = array('upload_data' => $this->upload->data()); $data['propertyDropdown'] = $_SESSION['propertyDropdown']; $data['username'] = $_SESSION['username']; $data['dbPropNumber'] = $_SESSION['dbPropNumber']; $data['propertyName'] = $this->content->getPropertyName($_SESSION['dbPropNumber']); //Present jCrop option after image is resized // FTP to final destination $this->load->view('upload_success', $data); } // end if } // end function
I'm not entirely sure what's going wrong with your code, but here's a model function I wrote for resizing images to fit an exact target height and target width. Read through it and see if you can't figure out the solution.
$this->prefix
is a property in my class that I use so I don't have to keep writing out the directory of the file. It looks like this:
$this->prefix = FCPATH.'uploads'.DIRECTORY_SEPARATOR;
Image resizer
/**
* Resizes an image to fit exact dimensions
*
* @param string filename
* @param int target_width
* @param int target_height
*
* @return array('success' ? null : 'error')
*/
function resizeImageToDimensions($filename, $target_width=700, $target_height=399)
{
$file_type = $this->getFileType($this->prefix.$filename);
if (!$file_type || $file_type != 'image')
return array('success'=>false, 'error'=>"This file doesn't exist or isn't an image");
$this->load->library('image_lib');
list($width, $height) = getimagesize($this->prefix.$filename);
$current_ratio = $width/$height;
$target_ratio = $target_width/$target_height;
$config['source_image'] = $this->prefix.$filename;
if ($current_ratio > $target_ratio)
{
//resize first to height, maintain ratio
$config['height'] = $target_height;
$config['width'] = $target_height * $current_ratio;
$this->image_lib->initialize($config);
if (!$this->image_lib->resize())
return array('success'=>false, 'error'=>"There was an error while resizing this image");
//then crop off width
$config['width'] = $target_width;
$config['maintain_ratio'] = false;
$this->image_lib->initialize($config);
if ($this->image_lib->crop())
return array('success'=>true);
else
return array('success'=>false, 'error'=>"There was an error while cropping this image");
}
else if ($current_ratio < $target_ratio)
{
//resize first to width, maintain ratio
$config['width'] = $target_width;
$config['height'] = $target_width / $current_ratio;
$this->image_lib->initialize($config);
if (!$this->image_lib->resize())
return array('success'=>false, 'error'=>"There was an error while resizing this image");
//then crop off height
$config['height'] = $target_height;
$config['maintain_ratio'] = false;
$this->image_lib->initialize($config);
if ($this->image_lib->crop())
return array('success'=>true);
else
return array('success'=>false, 'error'=>"There was an error while cropping this image");
}
else {
$config['width'] = $target_width;
$config['height'] = $target_height;
$this->image_lib->initialize($config);
if ($this->image_lib->resize())
return array('success'=>true);
else
return array('success'=>false, 'error'=>"There was an error while resizing this image");
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With