Get aspect ratio from width and height of image (PHP or JS)

后端 未结 4 1245
小鲜肉
小鲜肉 2021-01-01 04:51

I can\'t believe I can\'t find the formula for this. I am using a PHP script called SLIR to resize images. The script asks to specify an aspect ratio for cropping. I\'d like

相关标签:
4条回答
  • 2021-01-01 05:24

    to get the aspect ratio just simplify the width and height like a fraction for example:

    1024      4
    ----  =  ---
    768       3
    

    the php code:

    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);
    
    0 讨论(0)
  • 2021-01-01 05:27

    If you can get one of: height, width then you can calculate the missing width height:

    original width * new height / original height = new width;

    original height * new width / original width = new height;

    Or if you just want a ratio:

    original width / original height = ratio

    0 讨论(0)
  • 2021-01-01 05:35

    There is no need for you to do any kind of calculation.

    Just because it says aspect ratio doesn't mean it has to be one of a limited set of commonly used ratios. It can be any pair of numbers separated by a colon.

    Quoting from the SLIR usage guide:

    For example, if you want your image to be exactly 150 pixels wide by 100 pixels high, you could do this:

    <img src="/slir/w150-h100-c150:100/path/to/image.jpg" alt="Don't forget your alt text" /> 
    

    Or, more concisely:

    <img src="/slir/w150-h100-c15:10/path/to/image.jpg" alt="Don't forget your alt text" />
    

    Note that they didn't bother to reduce that even further to c3:2.

    So, simply use the values as entered by the user: 1024:768.

    If you want to be concise, calculate the greatest common divisor of the width and height and divide both of them by that. That would reduce your 1024:768 down to 4:3.

    0 讨论(0)
  • 2021-01-01 05:50

    Here's a much simpler alternative for greatest common divisor integer ratios:

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

    The request echo ratio(25,5); returns 5:1.

    If your server wasn't compiled with GMP functions ...

    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);
    }
    
    0 讨论(0)
提交回复
热议问题