2011-11-07 108 views
4

我不敢相信我找不到這個公式。我正在使用名爲SLIR的PHP腳本來調整圖像大小。該腳本要求指定剪裁的寬高比。我希望根據用戶輸入這些值的表單中指定的圖像的寬度和高度來獲得寬高比。例如,如果用戶輸入1024x768圖像,則會得到高寬比爲4:3。對於我的生活,我無法找到PHP或Javascript中的公式示例,我可以根據知道w,h並將長寬比插入變量來獲取寬高比值。從圖像的寬度和高度獲得寬高比(PHP或JS)

+1

不知道我是否理解正確,但也許您正在尋找1024/768(寬度/高度)? – Fabrizio

回答

2

有沒有必要做任何類型的的計算。

僅僅因爲它說縱橫比並不意味着它必須是有限的一組commonly used ratios之一。它可以是任何由冒號分隔的數字對。

the SLIR usage guide報價:

例如,如果你希望你的形象是完全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" /> 

注意,他們並沒有刻意去減少THA甚至進一步到c3:2

因此,只需使用由用戶輸入的值:1024:768

如果您想簡明扼要,請計算寬度和高度的greatest common divisor,並將其除以二者。這會將您的1024:768降低至4:3

9

如果你能得到之一:高度,寬度,則可以計算出丟失的寬度高度:

原來寬*新的高度/原高度=新寬度;

原始高度*新寬度/原始寬度=新高度;

或者,如果你只想要一個比:

原始的寬/初始高度=比

6

得到縱橫比只是簡化的寬度和高度等,例如一小部分:

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

下面是最大公約數整數比一個更簡單的選擇:

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