создание миниатюр

В этой заметке мы научимся создавать миниатюры с использованием PHP и GD-функций.

В конце заметки мы сможем создать миниатюры из всех изображений в определенной папке.

Для создания изображений с помощью PHP нам потребуется GD библиотека, установленная на нашем сервере.

Для того, чтобы проверить установлена ли нужная нам библиотека, просто посмотрим на вывод функции

1
<?phpinfo()?>

и в цветной таблице показаны все характеристики PHP. нам понадобится лишь раздел GD, если в разделе GD version написано 2.0 or higher, то все в порядке, если же нет, то вам будет необходимо ее установить, чтобы продолжить дальше.

Теперь немного об алгоритме.

Для того чтобы создать миниатюры мы проделаем несколько шагов.

  • Пройдемся по папке в поисках JPG и PNG файлов (GD не поддерживает GIF-формат, потому что алгоритм сжатия, применяемый там, находится под защитой авторских прав)
  • Взять каждое изображение и загрузить его
  • Изменить размер
  • Сохранить полученное изображение как миниатюру

Теперь алгоритм изменения размера:

  • Размер миниатюры будет 100 пикселей, либо по ширине, либо по высоте.
  • Заргужая изображение, мы проверим какое из измерений больше и установим его равным 100 пикселям.
  • Подсчитаем другое измерение

Главная функция генерации миниатюр

createThumbnail

1
2
3
4
5
6
7
8
function createThumbnail($name, $filename, $new_w, $new_h) {
   $system = explode('.', $name);
   if (preg_match('/jpg|jpeg/'), $system[1])) {
      $src_img = imagecreatefromjpeg($name);
   }
   if (preg_match('/png/', $system[1])) {
      $src_img = imagecreatefrompng($name);
   }

Для каждого изображения своя функция создания.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$old_x = imageSX($src_img);
$old_y = imageSY($src_img);
if ($old_x > $old_y) {
   $thumb_w = $new_w;
   $thumb_h = $old_y * ($new_h / $old_x);
}
if ($old_x < $old_y) {
   $thumb_w = $old_x * ($new_w / $old_y);
   $thumb_h = $new_h;
}
if ($old_x == $old_y) {
   $thumb_w = $new_w;
   $thumb_h = $new_h;
}

Функции imageSX() и imageSY() получают ширину и высоту соответственно. Дальше мы расчитываем ширину и высоту миниатюры, сохраняя правильные пропорции.

1
2
$dst_img = ImageCreateTrueColor($thumb_w, $thumb_h);
imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $thumb_w, $thumb_h, $old_x, $old_y);

Эти строки создают True Color изображение и копируют исходное с правильными размерами миниатюр.

1
2
3
4
5
6
7
8
if (preg_match("/png/",$system[1])) {
   imagepng($dst_img, $filename);
}
else {
   imagejpeg($dst_img, $filename);
}
imagedestroy($dst_img);
imagedestroy($src_img);

Сейчас мы проверяем расширение изображение, чтобы миниатюры имели тоже самое.

Как использовать функцию createThumbnail()

Допустим мы имеем изображение pic.jpg, находящееся в папке images, и хотим создать миниатюру в папке thumbs с именем pic_th.jpg с максимальными измерениями по ширине и высоте в 100 пикселей.

1
createThumbnail('images/pic.jpg', 'thumbs/pic_th.jpg', 100, 100);

Чтобы создать миниатюры из всех изображений, находящихся в определенной папке и расположить их в папке, к примеру thumb c префиксом th_, воспользуемся кодом снизу.

1
2
3
4
5
6
7
$pics = directory('pics', 'jpg,JPG,JPEG,jpeg,png,PNG');
$pics = ditchtn($pics, 'tn_');
if ($pics[0] != '') {
   foreach ($pics as $pic) {
      createThumbnail('pics/' . $pic, 'thumb/tn_' . $p, 100, 100);
   }
}

Теперь мы научились создавать миниатюры на PHP, это может потребоваться для организации какой-нибудь галереи. Например, можно использовать вместе с jQuery. Но не стоит слишком обольщаться, потому как порой функции gd-библиотеки работают слишком медленно. На некоторых серверах может появляться ошибка, связанная с долгим выполнением скрипта. для того, чтобы увеличить это время, подкорректируем параметр max_execution_time = 300 ; в файле php.ini. Похожая заметка о создании миниатюр на PHP.