真不敢相信我竟然找不到这个的配方我正在使用一个名为SLIR的PHP脚本来调整图像大小。脚本要求指定裁剪的纵横比。我想得到宽高比的基础上的宽度和高度的图像被指定在一个形式,我让用户输入这些值。例如,如果用户输入一个1024x768的图像,我会得到一个4:3的宽高比。对于我的生活,我找不到一个在PHP或JavaScript中的公式的例子,我可以使用它来获得基于w,h的长宽比值,并将长宽比插入到一个变量中。
f87krz0w1#
如果你能得到其中一个:height,width然后你可以计算缺少的width height:原始宽度 * 新高度/原始高度=新宽度;原始高度 * 新宽度/原始宽度=新高度;如果你只想要一个比例:原始宽度/原始高度=比率
6mzjoqzu2#
要得到纵横比,只需将宽度和高度简化为分数,例如:
1024 4 ---- = --- 768 3
PHP代码:
function gcd($a, $b) { if ($a == 0 || $b == 0) return abs( max(abs($a), abs($b)) ); $r = $a % $b; return ($r != 0) ? gcd($b, $r) : abs($b); } $gcd=gcd(1024,768); echo "Aspect ratio = ". (1024/$gcd) . ":" . (768/$gcd);
qaxu7uf23#
这里有一个更简单的最大公约数整数比的替代方案:
function ratio( $x, $y ){ $gcd = gmp_strval(gmp_gcd($x, $y)); return ($x/$gcd).':'.($y/$gcd); }
请求echo ratio(25,5);返回5:1。如果您的服务器没有使用GMP函数编译...
echo ratio(25,5);
5:1
function gcd( $a, $b ){ return ($a % $b) ? gcd($b,$a % $b) : $b; } function ratio( $x, $y ){ $gcd = gcd($x, $y); return ($x/$gcd).':'.($y/$gcd); }
o2rvlv0m4#
你不需要做任何计算。仅仅因为它说纵横比并不意味着它必须是有限的一组commonly used ratios之一。它可以是由冒号分隔的任何一对数字。引用SLIR使用指南:例如,如果你想让你的图像正好是150像素宽100像素高,你可以这样做:
<img src="/slir/w150-h100-c150:100/path/to/image.jpg" alt="Don't forget your alt text" />
或者,更简洁地说:
<img src="/slir/w150-h100-c15:10/path/to/image.jpg" alt="Don't forget your alt text" />
请注意,他们没有费心将其进一步减少到c3:2。因此,只需使用用户输入的值:1024:768。如果你想简洁,计算宽度和高度的greatest common divisor,然后用它们除以。这将把1024:768减少到4:3。
c3:2
1024:768
4:3
omqzjyyz5#
如果您没有安装GMP数学扩展。下面是我使用的一个无依赖性的解决方案:
function aspect_ratio($width, $height) { $ratio = [$width, $height]; for ($x = $ratio[1]; $x > 1; $x--) { if (($ratio[0] % $x) == 0 && ($ratio[1] % $x) == 0) { $ratio = [$ratio[0] / $x, $ratio[1] / $x]; } } return implode(':', $ratio); }
它可以这样使用:
echo aspect_ratio(1920, 1080); // Outputs 16:9 echo aspect_ratio(1024, 768); // Outputs 4:3 echo aspect_ratio(200, 300); // Outputs 2:3
来源:https://forums.digitalpoint.com/threads/how-i-will-get-ratio-of-2-number-in-php.937696/
nnsrf1az6#
这里有一个简单得多的替代方案,用于获取不带gmp扩展的纵横比:
<?php function getAspectRatio(int $width, int $height) { // search for greatest common divisor $greatestCommonDivisor = static function($width, $height) use (&$greatestCommonDivisor) { return ($width % $height) ? $greatestCommonDivisor($height, $width % $height) : $height; }; $divisor = $greatestCommonDivisor($width, $height); return $width / $divisor . ':' . $height / $divisor; } echo getAspectRatio(1280, 1024); echo PHP_EOL; echo getAspectRatio(1275, 715);
来源:https://gist.github.com/wazum/5710d9ef064caac7b909a9e69867f53b
6条答案
按热度按时间f87krz0w1#
如果你能得到其中一个:height,width然后你可以计算缺少的width height:
原始宽度 * 新高度/原始高度=新宽度;
原始高度 * 新宽度/原始宽度=新高度;
如果你只想要一个比例:
原始宽度/原始高度=比率
6mzjoqzu2#
要得到纵横比,只需将宽度和高度简化为分数,例如:
PHP代码:
qaxu7uf23#
这里有一个更简单的最大公约数整数比的替代方案:
请求
echo ratio(25,5);
返回5:1
。如果您的服务器没有使用GMP函数编译...
o2rvlv0m4#
你不需要做任何计算。
仅仅因为它说纵横比并不意味着它必须是有限的一组commonly used ratios之一。它可以是由冒号分隔的任何一对数字。
引用SLIR使用指南:
例如,如果你想让你的图像正好是150像素宽100像素高,你可以这样做:
或者,更简洁地说:
请注意,他们没有费心将其进一步减少到
c3:2
。因此,只需使用用户输入的值:
1024:768
。如果你想简洁,计算宽度和高度的greatest common divisor,然后用它们除以。这将把
1024:768
减少到4:3
。omqzjyyz5#
如果您没有安装GMP数学扩展。下面是我使用的一个无依赖性的解决方案:
它可以这样使用:
来源:https://forums.digitalpoint.com/threads/how-i-will-get-ratio-of-2-number-in-php.937696/
nnsrf1az6#
这里有一个简单得多的替代方案,用于获取不带gmp扩展的纵横比:
来源:https://gist.github.com/wazum/5710d9ef064caac7b909a9e69867f53b