图像调整大小功能出现问题。
// 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
使用该比率调整图像大小现在可以使用上面更新的函数。我现在发现的问题是,如果原始宽度小于我想要指定的尺寸,则图像的大小调整(变大)。
我所追求的是经过调整大小的图像,它永远不会比$maxWidth
更宽,永远不会高于$maxHeight
,同时保持原始图像的宽高比。
答案 0 :(得分:1)
你想要这个我想:
$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;
}
然后围绕你的imagecopyresized put:
if ($doResize) {
imagecopyresized($virtual_image,$source_image,0,0,0,0,$maxWidth,$desired_height,$width,$height);
}
答案 1 :(得分:0)
知道了。
/* 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;
}