Главная > PHP > Создание превьюшек в PHP

Создание превьюшек в PHP

Сегодня почему-то захотелось показать простую, но тем не менее очень полезную функцию для создания превьюшек больших изображений. Часто бывает так, что имея большое изображение, нам нужно вывести маленькую его копию для предпросмотра или галереи. Вот тут нам и пригодится 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

admin PHP ,

  1. 5 Февраль 2008 в 22:29 | #1

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

  2. 5 Февраль 2008 в 22:41 | #2

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

  3. 7 Февраль 2008 в 14:37 | #3

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

  4. 12 Февраль 2008 в 20:57 | #4

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

  5. 21 Февраль 2008 в 03:20 | #5

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

  6. 9 Март 2008 в 22:47 | #6

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

  7. mihdan
    23 Апрель 2008 в 15:44 | #7

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

  8. sKaa
    4 Декабрь 2008 в 06:48 | #8

    Каптча жжот :)
    Между прочим она делается такими же скриптами как и описали сверху :)
    ахахах
    5*7+9 ))))
    её любым скриптом можно разпознать

  9. BlueWolf
    19 Октябрь 2009 в 11:34 | #9

    Как зделать так чтобы ширина была одинаковой а длина создавалась автоматически.

  1. Пока что нет уведомлений.