0

我正在尝试生成用户上传的图像的缩略图。通过让我的缩略图类生成一个为原始图像宽度和高度的 50% 的缩略图,我已经获得了基本功能。但是,我想扩展它的功能并对缩图 50% 后大于 400 像素的缩略图实施硬性限制。

这是我到目前为止所拥有的:

$x = $image_info[0]; // width of original image
$y = $image_info[1]; // height of original image
$x_t = $x/2; // width of 50% thumbnail
$y_t = $y/2; // height of 50% thumbnail
$biggest = ($x_t > $y_t) ? $x_t : $y_t; // determine the biggest side of the thumbnail

if($biggest > 400)
{
    // Enforce a 400px limit here

    /// somehow :(
}

有了这个硬限制,我希望将原始图像按比例缩小,使任何一侧都不超过 400 像素,并且我希望将另一侧相对按比例缩小,以便图像看起来不会失真。

像我一样糟糕的数学,我无法计算出我的缩略图类应该调整图像大小的图像尺寸。

有任何想法吗?

4

2 回答 2

2

您必须计算比例因子:

$factor = $biggest / 400;  // if 503, then factor = 1.2575;

$new_x = $x / $factor;
$new_y = $y / $factor;

并使用这两个新维度进行缩放。这会将 $biggest 的任何一侧减少到 400,并将其他维度按比例减少到小于 400 的值。

于 2011-08-05T16:48:41.940 回答
0

您将必须检查每个长度,而不是同时检查两个:

if ($x > 400) {
    $x_t = 400;
    $y_t = $y * (400 / $x);
}
if ($y > 400) {
    ...

例如,如果 $x 为 600,则计算将变为 $y_t = $y * (400 / 600),从而将 $y 减少到其原始值的 2/3。

并为 $y 边添加相同的条件。此外,如果不允许任何一方大于 400,您可能希望同时应用计算。

于 2011-08-05T16:49:01.287 回答