@kamisarlapsha

Как определить переменную в зависимости от размера картинки?

Привет! Есть разные картинки разного размера. Как можно определить переменную в зависимости от их размера ?
То есть если картинки вертикальная - одно значение переменной. Если горизонтальной - то другое. (Это я вроде сделал)
Как сделать, что если картинка почти квадратная (прям квадратных нет) То есть длина на чуть чуть больше высоты - то третье значение. Заранее спасибо.

Думал что то такое сделать, но это не совсем подходит.
$image = 'image/' . $result['image'];
                    $imagedetails = getimagesize($image);
                    $imgwidth = $imagedetails[0];
                    $imgheight = $imagedetails[1];

                $imgwidth_max = $imgwidth / 3 + $imgwidth;
                $imgheight_max = $imgheight / 3 + $imgheight;
                
                if ($imgwidth_max > $imgheight) {
                    $imgclass = '2';
                } else if ($imgwidth_max < $imgheight) {
                    $imgclass = '3';
                }
  • Вопрос задан
  • 108 просмотров
Решения вопроса 2
Immortal_pony
@Immortal_pony Куратор тега PHP
$even_img_diff = 100; // задайте тут число по вкусу. Это максимальная разница между шириной и высотой при которой картинка будет счиататься "квадратной". 
$img_diff = abs($imgwidth_max-$imgheight);

if ($img_diff <= $even_img_diff ) {
   // почти квадратная
} elseif ($imgwidth_max > $imgheight) {
    $imgclass = '2';
} elseif ($imgwidth_max < $imgheight) {
    $imgclass = '3';
}
Ответ написан
Комментировать
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
Я бы определил пороговые значения, при которых считаем изображение "квадратным" и сверял с ними:

// Пороговые значения
$min_ratio = 0.8;
$max_ratio = 1.2;

// Берем изображение и получает размеры
$image = "image/{$result['image']}";
$image_size = getimagesize($image);

// Определяем соотношение сторон c точностью до 1 знака после запятой
$ratio = round($image_size[0] / $image_size[1], 1);

// Определяем "квадратное" наше изображение или нет
if( ($min_ratio <= $ratio) && ($ratio <= $max_ratio) ) {
	dump( 'Оно квадратное!' );
} else {
	dump( 'Фигушки.' );
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@alexalexes
Определяете с помощью метрики - пропорции:
$p = $imgwidth * 1.0 / $imgheight; // пропорция; умножение на 1.0 чтобы перевести число в float;
$delta_q = 0.1; // Дельта ощущения "квадратности" изображения
switch(true)
{
  case $p > (1.0 +  $delta_q): echo 'альбомный формат изображения'; break;
  case $p < (1.0 - $delta_q): echo 'книжный формат изображения'; break;
  default: echo 'изображение, вероятно, квадратное'; 
}

Когда у вас пропорция $p == 1.0 , то изображение строго квадратное.
Чтобы избавиться от строгости, вводится дельта $delta_q, дабы считать квадратными изображения, в пропорции "слегка" меньше единицы и "слегка" больше единицы.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы