Reputation: 2688
Having an issue with a image resize function.
// Image Resizer
function MakeThumbnail($inputFile, $filepath, $ext, $maxWidth, $maxHeight){
/* Get some details about the image */
$srcDetails = getimagesize($inputFile);
switch ($srcDetails[2]) {
case 1: //GIF
$source_image = imagecreatefromgif($inputFile);
break;
case 2: //JPEG
$source_image = imagecreatefromjpeg($inputFile);
break;
case 3: //PNG
$source_image = imagecreatefrompng($inputFile);
break;
case 6: //WBMP
$source_image = imagecreatefromwbmp($inputFile);
break;
default:
break;
}
/* Original Dimensions */
$width = imagesx($source_image);
$height = imagesy($source_image);
/* find the "desired height" of this thumbnail, relative to the desired width, and vice-versa */
if(($maxWidth <= $width) && $maxHeight <= $height){
if($target_ratio == $original_ratio){
$desired_height = $maxHeight;
$desired_width = $maxWidth;
}elseif($target_ratio > $original_ratio){
$desired_height = $maxHeight;
$desired_width = $width * ($maxHeight / $height);
}elseif($target_ratio < $original_ratio){
$desired_height = $height * ($maxWidth / $width);
$desired_width = $maxWidth;
}
}else{
$desired_height = $maxHeight;
$desired_width = $maxWidth;
}
imagecopyresized($virtual_image,$source_image,0,0,0,0,$maxWidth,$desired_height,$width,$height);
/* create the physical thumbnail image to its destination */
switch ($srcDetails[2]) {
case 1: //GIF
imagegif($virtual_image, $filepath);
imagedestroy($virtual_image);
break;
case 2: //JPEG
imagejpeg($virtual_image, $filepath, 100);
imagedestroy($virtual_image);
break;
case 3: //PNG
imagepng($virtual_image, $filepath, 6);
imagedestroy($virtual_image);
break;
case 6: //WBMP
imagewbmp($virtual_image, $filepath);
imagedestroy($virtual_image);
break;
default:
imagedestroy($virtual_image);
break;
}
}
MakeThumbnail($pic2['tmp_name'], $pic2Path, $extension, 800, 600); //<- resize original
MakeThumbnail($pic2['tmp_name'], $pic2ThumbPath, $extension, 150, 100); //<- make a thumbnail
Image resizing with the ratio now works with the updated function above. Issue I am finding now, is that the image(s) are resized up (made bigger), if the original width is smaller that what I am trying to specify.
What I am after is a resized image that will never be wider than $maxWidth
, never be taller than $maxHeight
, yet keep the width to height ratio of the original image.
Upvotes: 1
Views: 128
Reputation: 6202
You want this I think:
$width = imagesx($source_image);
$height = imagesy($source_image);
// new code to check if image is too small
if ($width <= $maxWidth || height <= $maxHeight) { //because we need to check either, and not both
// image is too small; don't resize
$doResize = false;
} else {
$doResize = true;
}
Then around your imagecopyresized put:
if ($doResize) {
imagecopyresized($virtual_image,$source_image,0,0,0,0,$maxWidth,$desired_height,$width,$height);
}
Upvotes: 1
Reputation: 2688
Got it.
/* Get some details about the image */
$srcDetails = getimagesize($inputFile);
switch ($srcDetails[2]) {
case 1: //GIF
$source_image = imagecreatefromgif($inputFile);
break;
case 2: //JPEG
$source_image = imagecreatefromjpeg($inputFile);
break;
case 3: //PNG
$source_image = imagecreatefrompng($inputFile);
break;
case 6: //WBMP
$source_image = imagecreatefromwbmp($inputFile);
break;
default:
break;
}
/* Original Dimensions */
$width = imagesx($source_image);
$height = imagesy($source_image);
$target_ratio = $maxWidth / $maxHeight;
$original_ratio = $width / $height;
/* find the "desired height" of this thumbnail, relative to the desired width, and vice-versa */
if(($maxWidth <= $width) || $maxHeight <= $height){ // <-- needed to change this to orelse
if($target_ratio == $original_ratio){
$desired_height = $maxHeight;
$desired_width = $maxWidth;
}elseif($target_ratio > $original_ratio){
$desired_height = $maxHeight;
$desired_width = $width * ($maxHeight / $height);
}elseif($target_ratio < $original_ratio){
$desired_height = $height * ($maxWidth / $width);
$desired_width = $maxWidth;
}
}else{
$desired_height = $maxHeight;
$desired_width = $maxWidth;
}
$virtual_image = imagecreatetruecolor($desired_width, $desired_height);
imagecopyresized($virtual_image, $source_image, 0, 0, 0, 0, $desired_width, $desired_height, $width, $height);
/* create the physical thumbnail image to its destination */
switch ($srcDetails[2]) {
case 1: //GIF
imagegif($virtual_image, $filepath);
imagedestroy($virtual_image);
break;
case 2: //JPEG
imagejpeg($virtual_image, $filepath, 100);
imagedestroy($virtual_image);
break;
case 3: //PNG
imagepng($virtual_image, $filepath, 6);
imagedestroy($virtual_image);
break;
case 6: //WBMP
imagewbmp($virtual_image, $filepath);
imagedestroy($virtual_image);
break;
default:
imagedestroy($virtual_image);
break;
}
Upvotes: 0