2016-06-28 2 views
1

Je veux obtenir le rapport d'image lisible pour l'utilisation de ma fonction de redimensionnement, et pour l'affichage de l'utilisateur dans le résumé. basiquement je veux une fonction qui fonctionne comme suit:Ratio d'image lisible par PHP

function getHumanRatio($width, $height){ 
    // Do something over here. 
} 

echo getHumanRatio(1920, 1080) // 16:9 
echo getHumanRatio(480, 360) // 4:3 
echo getHumanRatio(360, 480) // 3:4 

Comme dit que je veux l'utiliser dans ma fonction de modification de taille, mais aussi dans un affichage/fonction de synthèse, mais l'utilisation du rapport numérique est UTILE ici. (Calculer comme ceci: $ratio = $oldWidth/$oldHeight;)

+1

vérifier ce lien: http: //codereview.stackexchange. com/questions/26697/get-the-plus-possible-integer-ratio-between-two-numbers –

Répondre

3
<?php 

function computeReadableRatio($x, $y){ 
    $d = gmp_gcd($x, $y); 
    $xnew = gmp_div($x, $d); 
    $ynew = gmp_div($y, $d); 

    echo gmp_strval($d) . ' ' . gmp_strval($xnew) . ' ' . gmp_strval($ynew); 

} 

computeReadableRatio(40, 60); 
?> 
+0

il fait le travail pour l'instant, encore besoin de vérifier si le serveur va exécuter gmp tu. Pouvez-vous me dire ce que $ d veut dire? – IMarks

+0

'$ d' est le résultat de' gmp_gcd() 'et doit représenter le 'plus grand commun diviseur', il n'y a pas d'autre possibilité. –

2

Si vous ne voulez pas dépendre de GMP, vous pouvez utiliser ce code:

function greatestCommonDivisor($int1,$int2) 
{ 
    if ($int2 == 0) return $int1; 
    else return greatestCommonDivisor($int2,$int1 % $int2); 
} 

function getHumanRatio($int1,$int2) 
{ 
    $divisor = greatestCommonDivisor($int1,$int2); 
    return intdiv($int1,$divisor).':'.intdiv($int2,$divisor).'<br>'; 
} 

echo getHumanRatio(1920,1080); // 16:9 
echo getHumanRatio(480,360); // 4:3 
echo getHumanRatio(360,480); // 3:4