Миниатюры изображений с центром 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-скрипт и изображения из галереи ниже.

Картинная галерея