Создание миниатюры изображения при помощи PHP

Рассмотрим реализацию создания миниатюры изображения на PHP. Для этого нам понадобится установленная графическая библиотека GD Graphics Library, которая предназначена для динамической работы с изображениями и обычно входит в сборку PHP. Проверить её наличие можно следующим образом:

if( function_exists('gd_info') ) echo 'Библиотека GD Graphics Library установлена.';

Существует различные подходы к созданию миниатюры изображения, но в этой статьей мы с вами посмотрим на обычное пропорциональное изменение размеров исходного изображения и сохранения результата в папку нашего сайта. Представим, что у нас есть исходное изображение.

Миниатюру этого изображения будем сохранять в ту же папку, где оно лежит, только с префиксом min_. Ширину будем уменьшать до 300 пикселей. Для начала получим размеры исходного изображения и определим коэффициент пропорциональности.

$image = $_SERVER['DOCUMENT_ROOT'].'/uploads/desert.jpg';
$miniature = $image;
$file = getimagesize($image);
$cop = ($file[0] > 300) ? $file[0]/300 : 1;

Значение коэффициента 1 будет говорить нам о том, что создание миниатюры не требуется, чтобы не ухудшить качество.

if($cop > 1) {
  $resource = imagecreatetruecolor($file[0]/$cop, $file[1]/$cop);
  $miniature = str_replace(basename($image), 'min_'.basename($image), $image);
 
  if($file['mime'] == 'image/jpeg' || $file['mime'] == 'image/jpg') {
    $id = imagecreatefromjpeg($image);
  }
  elseif($file['mime'] == 'image/png') {
    $id = imagecreatefrompng($image);
  }
 
  imagecopyresampled($resource, $id, 0, 0, 0, 0, $file[0]/$cop, $file[1]/$cop, $file[0], $file[1]);
 
  if($file['mime'] == 'image/jpeg' || $file['mime'] == 'image/jpg') {
    imagejpeg($resource, $miniature, 100);
  }
  elseif($file['mime'] == 'image/png') {
    imagepng($resource, $miniature, 100);
  }
 
  imagedestroy($resource);
  unset($resource, $id);
}
 
unset($image, $miniature, $file, $cop);

Получим результат.

С помощью функции imagecreatetruecolor мы создаём новое полноцветное изображение и пока оно будет представлять собой чёрное полотно. Исходя из того, в каком формате представлено исходное изображение мы используем функцию imagecreatefromjpeg или imagecreatefrompng для создания нового изображения из URL. Таким образом мы подготовили почву. Далее мы изменяем размеры изображения при помощи функции imagecopyresampled.

Из документации по PHP:

imagecopyresampled() копирует прямоугольную часть одного изображения на другое изображение, интерполируя значения пикселов таким образом, чтобы уменьшение размера изображения не уменьшало его четкости.

В нашем случае эта функция берет прямоугольный участок из $id с шириной $file[0] и высотой $file[1] на координатах (0,0) и помещает его в прямоугольный участок изображения $resource шириной $file[0]/$cop и высотой $file[1]/$cop на координатах (0,0).

И для того, чтобы сохранить получившуюся миниатюру исходного изображения мы применяем функцию imagejpeg или imagepng. Осталось только обернуть данный код в функцию, добавить необходимые проверки и вернуть результат.

Понравилась статья? Поделись: