在PHP中查找图像的新比例尺寸

时间:2013-05-14 07:38:15

标签: php image getimagesize

我有一个网站,我想上传图片并调整大小,因为我必须将它放入具有特定尺寸的div中。

例如,我的最大宽度为200px,最大高度为100px

我想上传图像并检查宽度和高度,如果它们大于最大宽度或最大高度我想找到图像的大小以保持在div内。

如何按比例调整图像大小? 我只想在我的div 200px * 100px

的基础上找到新的宽度和新的高度

这是我的剧本:

            if(move_uploaded_file($tmp, $path.$actual_image_name))
            {
                list($width, $height, $type, $attr) = getimagesize($tmp);
                if($width>200){
                    //too large I want to resize
                }
                if($height>100){
                    //too height I want to resize
                }
                echo(base_url().$path.$actual_image_name);
            }

3 个答案:

答案 0 :(得分:1)

这是计算比率(保持持续规模)的基础:

if($width>200){
    $percentage = (200/$width)*100; //Work out percentage
    $newWidth = 200; // Set new width to max width
    $newHeight = round($height*$percentage); //Multiply original height by percentage
}
else if($height>100){
    $percentage = (100/$height)*100; //Work out percentage
    $newHeight = 100; // Set new height to max height
    $newWidth = round($width*$percentage); //Multiply original width by percentage
}

我使用round()来确保您收到仅限整数的新维度

答案 1 :(得分:1)

您可以使用以下功能保留在边界框内。 EG 200x200。只需发送文件位置和最大宽度和高度。它将返回一个数组,其中$ar[0]是新的宽度,$ar[1]是新的高度。

完整写出来让你理解数学。

<?php
function returnSize($maxW,$maxH,$img) {
    $maxW = ($maxW>0 && is_numeric($maxW)) ? $maxW : 0;
    $maxH = ($maxH>0 && is_numeric($maxH)) ? $maxH : 0;

    // File and new size
    if (!file_exists($img)) {
        $size[0]=0;
        $size[1]=0;
        return $size;
    }

    $size = getimagesize($img);

    if ($maxW>0 && $maxH>0) {
        if ($size[0]>$maxW) {
            $scaleW = $maxW / $size[0];
        } else {
            $scaleW = 1;
        }

        if ($size[1]>$maxH) {
            $scaleH = $maxH / $size[1];
        } else {
            $scaleH = 1;
        }

        if ($scaleW > $scaleH) {
            $fileW = $size[0] * $scaleH;
            $fileH = $size[1] * $scaleH;
        } else {
            $fileW = $size[0] * $scaleW;
            $fileH = $size[1] * $scaleW;
        }

    } else if ($maxW>0) {
        if ($size[0]>$maxW) {
            $scaleW = $maxW / $size[0];
        } else {
            $scaleW = 1;
        }

        $fileW = $size[0] * $scaleW;
        $fileH = $size[1] * $scaleW;

    } else if ($maxH>0) {
        if ($size[1]>$maxH) {
            $scaleH = $maxH / $size[1];
        } else {
            $scaleH = 1;
        }

        $fileW = $size[0] * $scaleH;
        $fileH = $size[1] * $scaleH;

    } else {
        $fileW = $size[0];
        $fileH = $size[1];
    }

    $size[0] = $fileW;
    $size[1] = $fileH;

    return $size;
}
?>

答案 2 :(得分:0)

以下是一些选项......

第一个:http://www.white-hat-web-design.co.uk/blog/resizing-images-with-php/

和第二个:http://www.sitepoint.com/image-resizing-php/ - 所有数学工作已经完成