To re-size images with keeping aspect ratio and fitting to certain dimensions

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

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.