понедельник, 29 октября 2012 г.

Расчёт при ресайзе изображения

Сегодня я хотел бы поделиться функцией, которую использую всегда, когда мне надо изменить размеры картинки. Эта функция позволяет с сохранением пропорции, либо вписать изображение в заданный прямоугольник, либо изменить какое-то одно измерение (длинну, ширину) до указанного.
function resizeProp($in_w, $in_h, $out_w, $out_h, $inlay = true)
{
    if (    (!$inlay AND
                (  ($in_h > $in_w
                    AND ($in_h / $in_w) < ($out_h / $out_w))
                OR
                    ($in_w > $in_h
                    AND ($in_w / $in_h) > ($out_w / $out_h))
                ))
            OR
            ($inlay AND
                (   ($in_h > $in_w
                    AND ($in_h / $in_w) > ($out_h / $out_w))
                OR
                    ($in_w > $in_h
                    AND ($in_w / $in_h) < ($out_w / $out_h))))
        )
    {
        $height = $out_h;
        $width = ($in_w / $in_h) * $height;
 
    } else {
 
        $width = $out_w;
        $height = ($in_h / $in_w) * $width;
    }
 
    return array('w' => round($width), 'h' => round($height));
}
$in_w, $in_h - размеры изображения (размер на входе).
Параметр $inlay - указывает на необходимость вписать изображение в прямоугольник с размерами: $out_w, $out_h (размер на выходе).  В противном случае ($inlay = false), прямоугольник будет вписан в изображение.

Сложное условие в "if" определяет какое из измерений можно просто привести к нужному, второе измерение уже вычисляется используя исходную пропорцию.

Комментариев нет:

Отправить комментарий