【问题标题】:PHP thumbnail generationPHP缩略图生成
【发布时间】:2011-08-05 16:41:21
【问题描述】:

我正在尝试为我的用户上传的图片生成缩略图。通过让我的缩略图类生成一个为原始图像宽度和高度的 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 像素,并且我希望将另一侧相对按比例缩小,以使图像看起来不会失真。

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

有什么想法吗?

【问题讨论】:

    标签: php thumbnails image-upload


    【解决方案1】:

    你必须计算一个比例因子:

    $factor = $biggest / 400;  // if 503, then factor = 1.2575;
    
    $new_x = $x / $factor;
    $new_y = $y / $factor;
    

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

    【讨论】:

    • 谢谢,但这似乎不起作用。当我上传大小为 2048/1216 的图像时,缩略图显示为:800x475
    • 没关系,修好了。必须这样做:$factor = $biggest/200;。谢谢! :)
    【解决方案2】:

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

    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,您可能希望同时应用计算。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-04
      • 2013-04-18
      • 1970-01-01
      • 1970-01-01
      • 2019-02-14
      • 2013-11-23
      • 2014-10-24
      相关资源
      最近更新 更多