Создание превьюшек в PHP
05.02.2008
Сегодня почему-то захотелось показать простую, но тем не менее очень полезную функцию для создания превьюшек больших изображений. Часто бывает так, что имея большое изображение, нам нужно вывести маленькую его копию для предпросмотра или галереи. Вот тут нам и пригодится 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
05.02.2008 в 22:29
1.А уязвимостей никаких не возникнет?
2.А проверка на существование файла?
3.На будущее - порой хочется делать особенный resize. К примеру вырезать квадрат по середине картинки (квадратная матрица для галереи). Или же уменьшить с фиксированной высотой или шириной (баннеры)
4.А другие расширения? Причём если это gif или png с прозрачностью, тогда получится некрасивый чёрный фон.
5.А если это фотка в оригинале.. 3.5 мегабайт.. fatal error?
05.02.2008 в 22:41
Это функция в общем виде, которая показывает принцип работы. Я же писал что нужно добавить еще дополнительные условия проверки. Кроме того поддержку других форматов тоже можно реализовать. А вцелом - спасибо за замечания, думаю всем полезно будет знать основные “узкие” места подобных скриптов!
07.02.2008 в 14:37
ОООо спасибо! давно искал подобное.
12.02.2008 в 20:57
Спасибо! Сам разбираюсь в пхп…очень помогло!
21.02.2008 в 03:20
Огромное Вам спасибо!
Коротко, понятно и доступно написано.
ПОшёл делать
09.03.2008 в 22:47
Много замечаний, но в целом - неплохо, продолжайте в том же духе.
23.04.2008 в 15:44
Ничего особенного - элементарно, но …