Сегодня почему-то захотелось показать простую, но тем не менее очень полезную функцию для создания превьюшек больших изображений. Часто бывает так, что имея большое изображение, нам нужно вывести маленькую его копию для предпросмотра или галереи. Вот тут нам и пригодится PHP и функция resize, которую мы сейчас напишем. В файле, где нужно вставить маленький рисунок пишем:
<img ALT="preview" SRC="resize.php?url=image.jpg" />
Тоесть просто ссылка на файл PHP, которому в качестве параметра “url” передаем имя файла, размеры которого нужно изменить.
Далее рассмотрим скрипт resize.php, который должен возвращать изображение с маленькими размерами:


<? function resize($img_src)
{
header('Content-type: image/jpeg'); list($width, $height) = getimagesize($img_src);

$source_img = imagecreatefromjpeg($img_src);

$dest_img = imagecreatetruecolor(64, 64);

imagecopyresampled($dest_img, $source_img, 0, 0, 0, 0, 64, 64, $width, $height);

imagejpeg($dest_img);
}

if(isset($_GET["url"]))
{
resize($_GET["url"]);
}
?>
Здесь мы описываем функцию resize, которой в качестве параметра передаем имя файла изображения. Функция довольно проста и не требует детального описания. При реальном использовании, нужно будет организовать более качественную защиту (для примера я использовал только функцию isset, которой недостаточно для надежной защиты).
Данный метод стоит использовать при небольшом количестве изображений, размер которых нужно изменить. При большом количестве таких изображений и их обработке возникает сильная нагрузка на сервер, в таком случае лучше все-таки создавать и загружать на сервер маленькие копии рисунков.<p

Комментарии (7) на запись “Создание превьюшек в PHP”

  1. Артём Курапов пишет:

    1.А уязвимостей никаких не возникнет?
    2.А проверка на существование файла?
    3.На будущее - порой хочется делать особенный resize. К примеру вырезать квадрат по середине картинки (квадратная матрица для галереи). Или же уменьшить с фиксированной высотой или шириной (баннеры)
    4.А другие расширения? Причём если это gif или png с прозрачностью, тогда получится некрасивый чёрный фон.
    5.А если это фотка в оригинале.. 3.5 мегабайт.. fatal error?

  2. DeVoid пишет:

    Это функция в общем виде, которая показывает принцип работы. Я же писал что нужно добавить еще дополнительные условия проверки. Кроме того поддержку других форматов тоже можно реализовать. А вцелом - спасибо за замечания, думаю всем полезно будет знать основные “узкие” места подобных скриптов!

  3. Витя пишет:

    ОООо спасибо! давно искал подобное.

  4. famin пишет:

    Спасибо! Сам разбираюсь в пхп…очень помогло!

  5. прикольный кадр пишет:

    Огромное Вам спасибо!
    Коротко, понятно и доступно написано.
    ПОшёл делать :)

  6. Legoman пишет:

    Много замечаний, но в целом - неплохо, продолжайте в том же духе.

  7. mihdan пишет:

    Ничего особенного - элементарно, но …

Оставить комментарий