I want to crop a 80×80 thumbnail from the center of an image using GD. I am currently using the function below, which I copied from [URL=”http://911-need-code-help.blogspot.com/2008/10/resize-images-using-phpgd-library.html”]http://911-need-code-help.blogspot.com/2008/10/resize-images-using-phpgd-library.html
Is there a way to resize the image smaller than 80×80 to 80x(a number larger than 80) and then crop 80×80 from the center of the image?
For example, if the image is 80×40, then it gets resized to 160×80. Then, 80×80 is cropped from it.
Or, if there’s an easier way to get an 80×80 thumbnail, can someone provide an example? Thanks in advance.
The following the function I’m currently using:
[code=php] define( ‘THUMBNAIL_IMAGE_MAX_WIDTH’, 80 );
define( ‘THUMBNAIL_IMAGE_MAX_HEIGHT’, 80 );
function generate_image_thumbnail( $source_image_path, $thumbnail_image_path )
{
list( $source_image_width, $source_image_height, $source_image_type ) = getimagesize( $source_image_path );
switch ( $source_image_type )
{
case IMAGETYPE_GIF:
$source_gd_image = imagecreatefromgif( $source_image_path );
break;
case IMAGETYPE_JPEG:
$source_gd_image = imagecreatefromjpeg( $source_image_path );
break;
case IMAGETYPE_PNG:
$source_gd_image = imagecreatefrompng( $source_image_path );
break;
}
if ( $source_gd_image === false )
{
return false;
}
$thumbnail_image_width = THUMBNAIL_IMAGE_MAX_WIDTH;
$thumbnail_image_height = THUMBNAIL_IMAGE_MAX_HEIGHT;
$source_aspect_ratio = $source_image_width / $source_image_height;
$thumbnail_aspect_ratio = $thumbnail_image_width / $thumbnail_image_height;
$thumbnail_small_width = $thumbnail_image_width / $source_image_width;
$thumbnail_small_height = $thumbnail_image_height / $source_image_height;
if ( $source_image_width <= $thumbnail_image_width && $source_image_height <= $thumbnail_image_height )
{
$thumbnail_image_width = $source_image_width * $thumbnail_small_width;
$thumbnail_image_height = $source_image_height * $thumbnail_small_height;
}
if ( $thumbnail_aspect_ratio > $source_aspect_ratio )
{
//I think the math needs to be edited here
$thumbnail_image_width = ( int ) ( $thumbnail_image_height * $source_aspect_ratio );
}
else
{
//It needs to be edited here as well
$thumbnail_image_height = ( int ) ( $thumbnail_image_width / $source_aspect_ratio );
}
$thumbnail_gd_image = imagecreatetruecolor( $thumbnail_image_width, $thumbnail_image_height );
imagecopyresampled( $thumbnail_gd_image, $source_gd_image, 0, 0, 0, 0, $thumbnail_image_width, $thumbnail_image_height, $source_image_width, $source_image_height );
imagejpeg( $thumbnail_gd_image, $thumbnail_image_path, 90 );
imagedestroy( $source_gd_image );
imagedestroy( $thumbnail_gd_image );
return true;
}