从图像的宽度和高度获取宽高比(PHP或JS)

enxuqcxy  于 2023-06-28  发布在  PHP
关注(0)|答案(6)|浏览(180)

真不敢相信我竟然找不到这个的配方我正在使用一个名为SLIR的PHP脚本来调整图像大小。脚本要求指定裁剪的纵横比。我想得到宽高比的基础上的宽度和高度的图像被指定在一个形式,我让用户输入这些值。例如,如果用户输入一个1024x768的图像,我会得到一个4:3的宽高比。对于我的生活,我找不到一个在PHP或JavaScript中的公式的例子,我可以使用它来获得基于w,h的长宽比值,并将长宽比插入到一个变量中。

f87krz0w

f87krz0w1#

如果你能得到其中一个:height,width然后你可以计算缺少的width height:
原始宽度 * 新高度/原始高度=新宽度;
原始高度 * 新宽度/原始宽度=新高度;
如果你只想要一个比例:
原始宽度/原始高度=比率

6mzjoqzu

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);
qaxu7uf2

qaxu7uf23#

这里有一个更简单的最大公约数整数比的替代方案:

function ratio( $x, $y ){
    $gcd = gmp_strval(gmp_gcd($x, $y));
    return ($x/$gcd).':'.($y/$gcd);
}

请求echo ratio(25,5);返回5:1
如果您的服务器没有使用GMP函数编译...

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);
}
o2rvlv0m

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

omqzjyyz

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/

nnsrf1az

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

相关问题