在PHP中重新定义图像高度

时间:2012-10-02 17:05:10

标签: php image

我有动态加载的图像,不能大于115px。我从外部来源获取它们,所以我无法控制它。

我可以通过以下方式获取图像尺寸:

$list = getimagesize($imagePath);
$width = $list[0];
$height = $list[1];

但是现在我需要调整大小,如果它们大于115px。试过这个,但没有保持这个比例:

$height = round(($height * $width) / $width);

有人可以帮我吗? 提前谢谢。

5 个答案:

答案 0 :(得分:1)

您应该考虑使用imagecopyresampledimagecopyresized

如果你想要保持图像正确缩放,你将不得不投入更多算术,但它不应该太糟糕。

这是缩放图像的一些伪代码:

$max_height = 115;
if ($height > $max_height)
{
    $scale = $max_height / $height;
    $height = intval($height * $scale);
    $width  = intval($width  * $scale);
}

如果高度宽度必须小于115,这是一个更通用的形式:

$max_size = 115;
if (max($height, $width) > $max_size)
{
    $scale = $max_size / max($height, $width);
    $height = intval($height * $scale);
    $width  = intval($width  * $scale);
}

这可以保证图像的最大尺寸(高度或宽度)不大于115.

答案 1 :(得分:0)

如果你的意思是他们不能大于115x115。你必须经历的过程就像:

如果宽度大于115,则将宽度设置为115px,将height设置为height / original_width * 115;

我有一些来自图像上传器脚本的代码来执行此操作

    list($Width, $Height) = getimagesize($row["img_file"]);

    if(($Width > $Height) && ($Width > 115))
    {
        $Height = ceil(($Height / $Width) * 115) ;
        $Width = 115;
    }
    elseif(($Height > $Width) && ($Height > 115))
    {
        $Width = ceil(($Width / $Height)* 115);
        $Height = 115;
    }
    elseif(($Height > 115) && ($Height == $Width))
    {
        $Height = 115;
        $Width = 115;
    }

获得正确的尺寸后,您可以使用imagecreatefromjpeg / png / gif调整图像大小,然后使用imagecopyresampled。

图片上传脚本的另一部分代码,使用计算的尺寸

从网址调整图片大小
        if ($extension == "png")
        {
            $image = imagecreatefrompng($URLofImage)or die("Width Of Image: ".$widthofImage." Height Of Image: ".$heightofImage." Height: ".$height." Width: ".$width);
            $image_p = imagecreatetruecolor($widthofImage, $heightofImage)or die("Width Of Image: ".$widthofImage." Height Of Image: ".$heightofImage." Height: ".$height." Width: ".$width);
            imagealphablending($image_p, false);
            $color = imagecolorallocatealpha($image_p, 0, 0, 0, 0);
            imagesavealpha($image_p, true);
            list($width, $height) = getimagesize($URLofImage);

            imagecopyresampled($image_p, $image, 0, 0, 0, 0, $widthofImage, $heightofImage, $width, $height);
            imagepng($image_p, "./images/thumbs/".$name, 9);

            return ("./images/thumbs/".$name);
        }

答案 2 :(得分:0)

你应该直接看http://www.php.net/manual/en/function.getimagesize.php#97564

$max_width = 115; 
$max_height = 115;

list($width, $height) = getimagesize($imagePath);
$ratioh = $max_height/$height;
$ratiow = $max_width/$width;
$ratio = min($ratioh, $ratiow);

// New dimensions
$width = intval($ratio * $width);
$height = intval($ratio * $height);

答案 3 :(得分:0)

你的比例是高度/宽度比,所以把它放到一个变量:

  

$ ratio = $ width / $ height;

如果你有这样的图像:100x200像素,你的比例 1/2 。如果您希望图像的高度为20像素,则宽度应为10像素。

  

$ newHeight = 20;

     

$ newWidth = round($ newHeight * $ ratio); //给你10个

还可以说你想要宽度10px,只需用它来寻找新的宽度:

  

$ newWidth = 10;

     

$ newHeight = round($ newWidth / $ ratio);

因此,您应该指定至少一个边长,然后比率将帮助您找到其他边缘。

答案 4 :(得分:0)

根据您的最低浏览器要求,以及确实用于HTML输出,您可以在html中处理此问题,并为自己保存一些处理。

<img alt='image alt' src='imagesrc' style='max-width:115px; max-height:115px; height:auto; width:auto;' />