0

我正在尝试调整大小(保持纵横比)并裁剪多余的图像(超出缩略图限制),但是在裁剪 x = 中心和 y = 顶部时这样做。

我在这里遗漏了一些东西,但我的最终图像适合缩略图区域,而不是填充它并裁剪多余的部分。希望有人可以帮助我。

这是我的代码,到目前为止:

$image_width = 725; // not static, just an example
$image_height = 409; // not static, just an example

// image can be wide or portrait

$width = 140;
$height = 160;

$thumbnail = imagecreatetruecolor($width, $height); 
$white = imagecolorallocate($thumbnail, 255, 255, 255);
imagefill($thumbnail, 0, 0, $white);        

$width_ratio = $image_width/$width;
$height_ratio = $image_height/$height;

if ($width_ratio>$height_ratio) {
    $dest_width=$width;
    $dest_height=$image_height/$width_ratio;        
}
else{       
    $dest_width=$image_width/$height_ratio;
    $dest_height=$height;           
}   

$int_width = ($width - $dest_width)/2;
$int_height = ($height - $dest_height)/2;        

imagecopyresampled($thumbnail, $original_image, $int_width, $int_height, 0, 0, $dest_width, $dest_height, $image_width, $image_height);  

谢谢!

4

1 回答 1

1

您的$image_width, $image_height,$width$height是静态的,这意味着它们$width_ratio$height_ratio始终相同(分别为:5.17857142857142.55625,因此宽度比始终高于高度比)。

在这种情况下,您的代码块:

if ($width_ratio>$height_ratio) {
    $dest_width=$width;
    $dest_height=$image_height/$width_ratio;        
}
else{       
    $dest_width=$image_width/$height_ratio;
    $dest_height=$height;           
}

将永远运行if并且永远不会运行else- 删除它并留下:

$dest_width=$image_width/$height_ratio;
$dest_height=$height; 

并且您的图像将根据更高的值进行裁剪 - 在这种情况下,高度将相应地调整为新高度,并且超出的宽度将被切断。

希望这就是你要找的!

编辑:

现在脚本如果切割边缘相等。如果您希望它们从顶部或左侧完全切割(取决于比例),那么:

完全删除那部分代码:

$int_width = ($width - $dest_width)/2;
$int_height = ($height - $dest_height)/2;

if else将您之前提到的情况更改为:

if($width_ratio < $height_ratio) {
    $dest_width=$width;
    $dest_height=$image_height/$width_ratio;

    $int_width = ($width - $dest_width)/2;
    $int_height = 0;
} else {       
    $dest_width=$image_width/$height_ratio;
    $dest_height=$height;

    $int_width = 0;
    $int_height = ($height - $dest_height)/2;
}

编辑 2

水平总是平等地切断,垂直总是从顶部 - 如你所愿:

if($width_ratio < $height_ratio) {
    $dest_width=$width;
    $dest_height=$image_height/$width_ratio;
} else {       
    $dest_width=$image_width/$height_ratio;
    $dest_height=$height;
}

$int_width = ($width - $dest_width)/2;
$int_height = 0;
于 2013-08-26T13:26:37.250 回答