Read Time:1 Minute, 32 Second
To re-size images with keeping aspect ratio and fitting to certain dimensions
function _create_thumbnail($actual_filepath, $folder_path, $target_filename, $width, $height) { // $this->load->library('image_lib'); // $image_lib_config = array( // 'image_library' => 'gd2' // , 'source_image' => $actual_filepath // , 'new_image' => $folder_path.$target_filename // , 'maintain_ratio' => true // , 'width' => $width // , 'height' => $height // ); // $this->image_lib->clear(); // $this->image_lib->initialize($image_lib_config); // if ( !$this->image_lib->resize() ) // { // return ""; // } // $new_filename = $folder_path.$target_filename; // $new_filename = str_replace($_SERVER['DOCUMENT_ROOT'], "", $new_filename); // return $new_filename; list($source_width, $source_height, $source_type) = getimagesize($actual_filepath); switch ($source_type) { case IMAGETYPE_GIF: $source_gdim = imagecreatefromgif($actual_filepath); break; case IMAGETYPE_JPEG: $source_gdim = imagecreatefromjpeg($actual_filepath); break; case IMAGETYPE_PNG: $source_gdim = imagecreatefrompng($actual_filepath); break; } $source_aspect_ratio = $source_width / $source_height; $desired_aspect_ratio = $width / $height; if ($source_aspect_ratio > $desired_aspect_ratio) { /* * Triggered when source image is wider */ $temp_height = $height; $temp_width = ( int ) ($height * $source_aspect_ratio); } else { /* * Triggered otherwise (i.e. source image is similar or taller) */ $temp_width = $width; $temp_height = ( int ) ($width / $source_aspect_ratio); } /* * Resize the image into a temporary GD image */ $temp_gdim = imagecreatetruecolor($temp_width, $temp_height); imagecopyresampled( $temp_gdim, $source_gdim, 0, 0, 0, 0, $temp_width, $temp_height, $source_width, $source_height ); /* * Copy cropped region from temporary image into the desired GD image */ $x0 = ($temp_width - $width) / 2; $y0 = ($temp_height - $height) / 2; $desired_gdim = imagecreatetruecolor($width, $height); imagecopy( $desired_gdim, $temp_gdim, 0, 0, $x0, $y0, $width, $height ); $new_filename = $folder_path.$target_filename; imagejpeg($desired_gdim, $new_filename, 85); $new_filename = str_replace($_SERVER['DOCUMENT_ROOT'], "", $new_filename); return $new_filename; }
Reference: http://salman-w.blogspot.com.au/2009/04/crop-to-fit-image-using-aspphp.html