Миниатюры изображений с центром PHP
Создать треки: Третья часть
В первой части этого учебника мы видели, как создавать миниатюры изображений.
Сценарий был разработан во второй части для создания галерей миниатюр одинакового размера.
Однако изображения по-прежнему имеют недостаток в том, чтобы быть обрезанными по правой или нижней части, но было бы лучше центрировать миниатюру, обрезав по обеим сторонам одновременно. Кроме того, скрипт обрабатывает только изображения в формате jpg, и его следует распространить на другие распространённые в Сети графические форматы: gif и png.
Центрирование миниатюры
Добавляются две переменные смещения:
$xoff = 0; $yoff = 0;
Смещение - разница между высотой промежуточного изображения и высотой конечной миниатюры или шириной.
Если высота должна быть обрезана, эта строка добавляется в сценарий для расчета вертикального смещения:
$yoff = intval(($nh - $thumbh) / 2);
и если это ширина:
$xoff = intval(($nw - $thumbw) / 2);
Затем эти смещения вставляют в параметр функции, которая записывает часть промежуточного изображения:
imagecopy($viewimage, $newimage, 0, 0, $xoff, $yoff, $nw, $nh);
Обработка различных форматов графики
Таблица содержит основные форматы, распознанные PHP, ассоциируя с расширением файла код изображения:
$types = array("jpeg"=>IMG_JPG, "jpg"=>IMG_JPG, "gif"=>IMG_GIF, "png"=>IMG_PNG ); function getImageType($name) { global $types; $way = pathinfo($name); $ext = strtolower($way['extension']); $t = $types[$ext]; return $t; }
Функция PHP pathinfo помещает в массив компоненты пути к файлу, среди которых можно найти расширение.
В зависимости от возвращенного кода типа выбирается функция чтения изображения:
$t = getImageType($oldname); switch($t) { case IMG_JPG: $resimage = imagecreatefromjpeg($oldname); break; case IMG_GIF: $resimage = imagecreatefromgif($oldname); break; case IMG_PNG: $resimage = imagecreatefrompng($oldname); break; }
Загрузить сценарий
Архив содержит PHP-скрипт и изображения из галереи ниже.