実際、3780x2520 は 3:2 のアスペクト比です。幅に 3776 を使用しているため、472:315 が正しい比率です。除算すると 1.498 になり、これは 1.5 にかなり近く、3:2 に丸めることができます。
「標準」の比率 (「3:2」や「16:9」など) のみが必要な場合は、検出された比率を別の関数に渡して、それらを丸め、代わりに最も近い/最適な一致を見つけることができます。
これは、丸めを行うことができる一緒にまとめられた関数です(例のディメンションに対してのみテストされているため、まだ100%の成功を保証することはできません):
function findBestMatch($ratio) {
$commonRatios = array(
array(1, '1:1'), array((4 / 3), '4:3'), array((3 / 2), '3:2'),
array((5 / 3), '5:3'), array((16 / 9), '16:9'), array(3, '3')
);
list($numerator, $denominator) = explode(':', $ratio);
$value = $numerator / $denominator;
$end = (count($commonRatios) - 1);
for ($i = 0; $i < $end; $i++) {
if ($value == $commonRatios[$i][0]) {
// we have an equal-ratio; no need to check anything else!
return $commonRatios[$i][1];
} else if ($value < $commonRatios[$i][0]) {
// this can only happen if the ratio is `< 1`
return $commonRatios[$i][1];
} else if (($value > $commonRatios[$i][0]) && ($value < $commonRatios[$i + 1][0])) {
// the ratio is in-between the current common-ratio and the next in the list
// find whichever one it's closer-to and return that one.
return (($value - $commonRatios[$i][0]) < ($commonRatios[$i + 1][0] - $value)) ? $commonRatios[$i][1] : $commonRatios[$i + 1][1];
}
}
// we didn't find a match; that means we have a ratio higher than our biggest common one
// return the original value
return $ratio;
}
この関数を使用するには、比率文字列 (数値ではない) を渡すと、比率の共通リストで「最適な一致を検索」しようとします。
使用例:
$widtho = 3968;
$heighto = 2232;
$gcd = gcd($widtho, $heighto);
$ratio = ($widtho / $gcd).':'.($heighto / $gcd);
echo 'found: ' . $ratio . "\n";
echo 'match: ' . findBestMatch($ratio) . "\n";
$widtho = 3776;
$heighto = 2520;
$gcd = gcd($widtho, $heighto);
$ratio = ($widtho / $gcd).':'.($heighto / $gcd);
echo 'found: ' . $ratio . "\n";
echo 'match: ' . findBestMatch($ratio) . "\n";
$widtho = 3780;
$heighto = 2520;
$gcd = gcd($widtho, $heighto);
$ratio = ($widtho / $gcd).':'.($heighto / $gcd);
echo 'found: ' . $ratio . "\n";
echo 'match: ' . findBestMatch($ratio) . "\n";
上記のテストでは、次のように出力されます。
found: 16:9
match: 16:9
found: 472:315
match: 3:2
found: 3:2
match: 3:2
*参照が必要な場合は、ウィキペディアから「標準」の縦横比のリストを取得しました。