#javascript #php #aspect-ratio
#javascript #php #соотношение сторон
Вопрос:
Я не могу поверить, что не могу найти формулу для этого. Я использую PHP-скрипт под названием SLIR для изменения размера изображений. Скрипт запрашивает указать соотношение сторон для обрезки. Я хотел бы получить соотношение сторон на основе ширины и высоты изображения, указанных в форме, в которой я разрешаю пользователям вводить эти значения. Например, если пользователь введет изображение 1024х768, я получу соотношение сторон 4: 3. Хоть убейте, я не могу найти пример формулы в PHP или Javascript, которую я мог бы использовать, чтобы получить значения соотношения сторон на основе знания w, h и включить соотношение сторон в переменную.
Комментарии:
1. не уверен, правильно ли я понимаю, но, возможно, вы ищете 1024/768 (ширина / высота)?
Ответ №1:
Если вы можете получить одно из значений: height, width, то вы можете вычислить недостающую ширину height:
исходная ширина * новая высота / исходная высота = новая ширина;
исходная высота * новая ширина / исходная ширина = новая высота;
Или, если вам просто нужно соотношение:
исходная ширина / исходная высота = соотношение
Ответ №2:
чтобы получить соотношение сторон, просто упростите ширину и высоту, например, как дробь:
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);
Ответ №3:
Вот гораздо более простая альтернатива для наибольших целых коэффициентов общего делителя:
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);
}
Комментарии:
1. Почему я должен получать,
331:220
когда размер изображения равен 662×440, ожидал6:4
2. Эта функция предназначена для приведения соотношения к наименьшему общему знаменателю. Например, 6: 4 = 660×440 … не 662: 440, чье наименьшее точное соотношение = 331: 220. Имеет ли это смысл?
Ответ №4:
Вам не нужно выполнять какие-либо вычисления.
То, что указано соотношение сторон, не означает, что оно должно быть одним из ограниченного набора обычно используемых соотношений. Это может быть любая пара чисел, разделенных двоеточием.
Цитирую из руководства по использованию 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
.
Если вы хотите быть кратким, вычислите наибольший общий делитель ширины и высоты и разделите их на это. Это уменьшило бы ваше 1024:768
значение до 4:3
.
Ответ №5:
Если у вас не установлено расширение GMP math. Вот решение без зависимостей, которое я использую:
function aspect_ratio($width, $height) {
$ratio = [$width, $height];
for ($x = $ratio[1]; $x > 1; $x--) {
if (($ratio[0] % $x) == 0 amp;amp; ($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