用php计算正确的缩小比例照片大小的宽度和高度?

用php计算正确的缩小比例照片大小的宽度和高度?,php,math,Php,Math,关于导入的照片,我有两个可用变量,宽度和高度。(我可以使用imagesx等,但我批量导入,需要的时间太长) 例如 如果我说最大宽度是180px,我知道正确的高度应该是135px(在标准的风景照片上)。但是我得到的起始宽度和高度会根据照片的不同而变化 保持图像比例我需要做什么计算来计算缩小的宽度和高度 最终结果将以像素为单位,因此不能有任何小数位 (我实际上不需要重新调整照片的大小,只需计算大小即可。) 提前感谢:)这是我使用的一个: function scaleDimensions($orig_

关于导入的照片,我有两个可用变量,宽度和高度。(我可以使用imagesx等,但我批量导入,需要的时间太长)

例如

如果我说最大宽度是180px,我知道正确的高度应该是135px(在标准的风景照片上)。但是我得到的起始宽度和高度会根据照片的不同而变化

保持图像比例我需要做什么计算来计算缩小的宽度和高度

最终结果将以像素为单位,因此不能有任何小数位

(我实际上不需要重新调整照片的大小,只需计算大小即可。)

提前感谢:)

这是我使用的一个:

function scaleDimensions($orig_width, $orig_height, $max_width, $max_height) {
    if ($orig_width < $max_width && $orig_height < $max_height) {
        return array($orig_width, $orig_height);
    }

    $ratiow = $max_width / $orig_width;
    $ratioh = $max_height / $orig_height;
    $ratio = min($ratiow, $ratioh);
    $width = intval($ratio * $orig_width);
    $height = intval($ratio * $orig_height);
    return array($width, $height);
}
我用的是:

function scaleDimensions($orig_width, $orig_height, $max_width, $max_height) {
    if ($orig_width < $max_width && $orig_height < $max_height) {
        return array($orig_width, $orig_height);
    }

    $ratiow = $max_width / $orig_width;
    $ratioh = $max_height / $orig_height;
    $ratio = min($ratiow, $ratioh);
    $width = intval($ratio * $orig_width);
    $height = intval($ratio * $orig_height);
    return array($width, $height);
}
这是一个简单的交叉乘法规则。然后将数字四舍五入以去掉小数部分


这是一个简单的交叉乘法规则。然后将数字四舍五入,去掉小数部分。

这是@fire答案的javascript版本

scaleDimensions : function(orig_width, orig_height, max_width, max_height) {
    if (orig_width < max_width && orig_height < max_height) {
        return [orig_width, orig_height];
    }

    var ratiow = max_width / orig_width;
    var ratioh = max_height / orig_height;
    var ratio = Math.min(ratiow, ratioh);
    var width = (ratio * orig_width).toFixed(0);
    var height = (ratio * orig_height).toFixed(0);
    return [width, height];
}
scaleDimensions:函数(原始宽度、原始高度、最大宽度、最大高度){
if(原始宽度<最大宽度和原始高度<最大高度){
返回[起始宽度,起始高度];
}
变量比率=最大宽度/原始宽度;
var ratioh=最大高度/原始高度;
var比率=数学最小值(比率,比率);
风险值宽度=(比率*原始宽度).toFixed(0);
风险值高度=(比率*原始高度).toFixed(0);
返回[宽度、高度];
}

这是@fire答案的javascript版本

scaleDimensions : function(orig_width, orig_height, max_width, max_height) {
    if (orig_width < max_width && orig_height < max_height) {
        return [orig_width, orig_height];
    }

    var ratiow = max_width / orig_width;
    var ratioh = max_height / orig_height;
    var ratio = Math.min(ratiow, ratioh);
    var width = (ratio * orig_width).toFixed(0);
    var height = (ratio * orig_height).toFixed(0);
    return [width, height];
}
scaleDimensions:函数(原始宽度、原始高度、最大宽度、最大高度){
if(原始宽度<最大宽度和原始高度<最大高度){
返回[起始宽度,起始高度];
}
变量比率=最大宽度/原始宽度;
var ratioh=最大高度/原始高度;
var比率=数学最小值(比率,比率);
风险值宽度=(比率*原始宽度).toFixed(0);
风险值高度=(比率*原始高度).toFixed(0);
返回[宽度、高度];
}

你能解释一下这个等式吗?没有任何意义,求x。x=(540*180)/720交叉乘法:@joshuahedlund现在,为了展示我的数学能力,我该如何用PHP来表达呢$高度=(540*180)/720??不,我想你弄错了。它可能是这样的:
$new\u height=($old\u height*$new\u width)/$old\u width
你能解释一下这个等式吗?没有任何意义,求x。x=(540*180)/720交叉乘法:@joshuahedlund现在,为了展示我的数学能力,我该如何用PHP来表达呢$高度=(540*180)/720??不,我想你弄错了。它可能是这样的:
$new\u height=($old\u height*$new\u width)/$old\u width
scaleDimensions : function(orig_width, orig_height, max_width, max_height) {
    if (orig_width < max_width && orig_height < max_height) {
        return [orig_width, orig_height];
    }

    var ratiow = max_width / orig_width;
    var ratioh = max_height / orig_height;
    var ratio = Math.min(ratiow, ratioh);
    var width = (ratio * orig_width).toFixed(0);
    var height = (ratio * orig_height).toFixed(0);
    return [width, height];
}