Превью в виде квадрата (PHP)

Вступление

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

Функция square_preview

Создадим функцию void square_preview(string $filename, string $size), которая будет создавать квадратные превью из JPEG-изображений Функция будет принимать два параметра: имя файла и размер стороны квадрата.

<?php /** * void square_preview - создание квадратных превью из JPEG-файлов * * string $file - имя файла оригинального изображения * int $size - размер стороны квадрата превью * */ function square_preview($file, $size) { // Выставляем заголовок header("Content-Type: image/jpg"); // Открываем оригинальное изображение $source = imagecreatefromjpeg($file); // Получаем размеры оригинального изображения list($width, $height) = getimagesize($file); // Превью $thumbs = imagecreatetruecolor($size, $size); // Горизонтальное изображение if ($width > $height && $width > $size) { imagecopyresampled($thumbs, $source, 0, 0, (($width-$height)/2), 0, $size, $size, $height, $height); } // Вертикальное изображение elseif ($height > $width && $height > $size) { imagecopyresampled($thumbs, $source, 0, 0, 0, (($height-$width)/2), $size, $size, $width, $width); } // Если квадрат elseif ($height == $width && $height > $size) { imagecopyresampled($thumbs, $source, 0, 0, 0, 0, $size, $size, $width, $width); } // Изображение меньше размеров стороны else { $thumbs = $source; } // Выводим изображение imagejpeg($thumbs); } ?>

Примеры обработанных изображений

Горизонтальное изображение

Горизонтальное изображение

500x500

Горизонтальное изображение 500x500

300x300

Горизонтальное изображение 300x300

100x100

Горизонтальное изображение 100x100

Вертикальное изображение

Вертикальное изображение

500x500

Вертикальное изображение 500x500

300x300

Вертикальное изображение 300x300

100x100

Вертикальное изображение 100x100

Категории

ПрограммированиеPHPИзображения в PHPИзображения

Читайте также

Комментарии

Владислав Воробьев

Большое спасибо за рабочий скрипт! Только строку $source = imagecreatefromjpeg(); я бы заменил на
$type = exif_imagetype($file);
if ($type == 2)
$source = imagecreatefromjpeg ($file);
elseif ($type == 3)
$source = imagecreatefrompng ($file);
elseif ($type == 1)
$source = imagecreatefromgif ($file);
else
return false;

Ответить
Артём Фёдоров

Без проблем.

Ответить
Створення Сайтів

ОК, все понятно, спасибо!

Ответить
Артём Фёдоров

Нужно проверять тип файла, например функцией mime_content_type, и в зависимости от типа выдавать соответствующий заголовок (content-type: image/gif, например), ну и функции соответствующие imagecreatefromgif, imagegif или imagecreatefrompng, imagepng.

Ответить
Створення Сайтів

А как сделать, чтоб не только jpg, а й png и gif (тоесть стандартние изображения) так обрезало?

Ответить