Слава Україні!

Обрезка изображений

Php функция для обрезки изображений php
Часто приходится принимать какие-то изображения от пользователей на сайте, например, те же аватарки. Но у любого сайта есть вёрстка, которая определяет размер тех или иных изображений. И выходы за определённые пределы размеров сильно портят всю вёрстку. Поэтому тут можно либо сжать изображение, сделав его более мелким, либо обрезать. Разберём обрезку изображений в PHP. Функция для обрезания изображения в PHP:

    <?php
    /*
    $x_o и $y_o - координаты левого верхнего угла выходного изображения на исходном
    $w_o и h_o - ширина и высота выходного изображения
    */
    function crop($image, $x_o, $y_o, $w_o, $h_o) {
        if (($x_o < 0) || ($y_o < 0) || ($w_o < 0) || ($h_o < 0)) {
            echo "Некорректные входные параметры";
            return false;
        }
        list($w_i, $h_i, $type) = getimagesize($image); // Получаем размеры и тип изображения (число)
        $types = array("", "gif", "jpeg", "png"); // Массив с типами изображений
        $ext = $types[$type]; // Зная "числовой" тип изображения, узнаём название типа
        if ($ext) {
            $func = 'imagecreatefrom'.$ext; // Получаем название функции, соответствующую типу, для создания изображения
            $img_i = $func($image); // Создаём дескриптор для работы с исходным изображением
        } else {
            echo 'Некорректное изображение'; // Выводим ошибку, если формат изображения недопустимый
            return false;
        }
        if ($x_o + $w_o > $w_i) $w_o = $w_i - $x_o; // Если ширина выходного изображения больше исходного (с учётом x_o), то уменьшаем её
        if ($y_o + $h_o > $h_i) $h_o = $h_i - $y_o; // Если высота выходного изображения больше исходного (с учётом y_o), то уменьшаем её
        $img_o = imagecreatetruecolor($w_o, $h_o); // Создаём дескриптор для выходного изображения
        imagecopy($img_o, $img_i, 0, 0, $x_o, $y_o, $w_o, $h_o); // Переносим часть изображения из исходного в выходное
        $func = 'image'.$ext; // Получаем функция для сохранения результата
        return $func($img_o, $image); // Сохраняем изображение в тот же файл, что и исходное, возвращая результат этой операции
    }
    crop("image.jpg", 100, 100, 200, 50); // Вызываем функцию
    ?>
Код тщательно прокомментирован, поэтому всё с ним понятно. Конечно, в CSS есть возможность чётко задать размеры изображения, но Вы должны понимать, что глупо изображение 1600x1200 выводить с размером 160x120, так как сам файл будет грузиться очень долго, поэтому обрезание изображений в PHP может Вам пригодиться. Вдобавок, если Вам требуется не просто некая ширина, но и высота, например, 150x150, то через CSS можно сильно исказить изображение, поскольку пропорции у него могут быть другие. Поэтому и тут нам пригодится обрезка.
Предыдущая заметка MySQL: запросы DATE BETWEEN

Важлива інформація

Міністерство оборони
України
з 24.02 по 21.04
втрати противника
орієнтовно склали:
459530 ( +950 ) особового складу
7229 ( +16 ) танків
13896 ( +23 ) бойових бронемашин
11719 ( +41 ) артилерійських систем
1046 ( +0 ) РСЗВ
767 ( +4 ) засоби ППО
348 ( +0 ) літаків
325 ( +0 ) гелікоптерів
15785 ( +68 ) автомобільної техніки
26 ( +0 ) кораблі / катери
2115 ( +6 ) крилаті ракети
9379 ( +38 ) БПЛА
1926 ( +8 ) спец. техніки
4 ( +0 ) установок ОТРК/ТРК
1 ( +0 ) war.submarines

Поиск