В этой заметке мы научимся создавать миниатюры с использованием PHP и GD-функций.
В конце заметки мы сможем создать миниатюры из всех изображений в определенной папке.
Для создания изображений с помощью PHP нам потребуется GD библиотека, установленная на нашем сервере.
Для того, чтобы проверить установлена ли нужная нам библиотека, просто посмотрим на вывод функции
<?phpinfo()?>
и в цветной таблице показаны все характеристики PHP. нам понадобится лишь раздел GD, если в разделе GD version написано 2.0 or higher, то все в порядке, если же нет, то вам будет необходимо ее установить, чтобы продолжить дальше.
Теперь немного об алгоритме.
Для того чтобы создать миниатюры мы проделаем несколько шагов.
Пройдемся по папке в поисках JPG и PNG файлов (GD не поддерживает GIF-формат, потому что алгоритм сжатия, применяемый там, находится под защитой авторских прав)
Взять каждое изображение и загрузить его
Изменить размер
Сохранить полученное изображение как миниатюру
Теперь алгоритм изменения размера:
Размер миниатюры будет 100 пикселей, либо по ширине, либо по высоте.
Заргужая изображение, мы проверим какое из измерений больше и установим его равным 100 пикселям.
Подсчитаем другое измерение
Главная функция генерации миниатюр
createThumbnail
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);
}
Для каждого изображения своя функция создания.
$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() получают ширину и высоту соответственно. Дальше мы расчитываем ширину и высоту миниатюры, сохраняя правильные пропорции.
$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 изображение и копируют исходное с правильными размерами миниатюр.
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 пикселей.
createThumbnail('images/pic.jpg', 'thumbs/pic_th.jpg', 100, 100);
Чтобы создать миниатюры из всех изображений, находящихся в определенной папке и расположить их в папке, к примеру thumb c префиксом th_, воспользуемся кодом снизу.
$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.