обратная связь
На главную Статьи Функции
jQuery С чего начать? Дизайн Другие CSS HTML JavaScript PHP

Уважаемые посетители сайта, задающие вопросы вроде "А как прикрутить вашу корзину к сайту?" и т.п. Я не делаю готовых решений, я описываю логику реализации, для каждого отдельного сайта нужно будет дописывать те или иные вещи в любом случае, поэтому если вам очень нужно что-либо прикрутить или приделать, я оказываю платные и бесплатные услуги по консультированию и доработке сайтов. Пишите в форму обратной связи вверху страницы, отвечу всем.




Ресайз изображений "на лету" или простое создание превью изображений.




В этой статье расскажу о том, как сделать так, чтобы превью изображений генерировалось динамически из большой картинки. Такая задача возникает довольно часто и применяется для экономии места на сервере. Сразу оговорюсь, что будет использован специальный класс. Но сложного ничего не будет.
Начнем с самого кода класса:

<?php
class imageResize {
public function __construct($src, $width=100) {
//$filename – полный путь к файлу.
$filename=$_SERVER['DOCUMENT_ROOT'].$src;
//функция getimagesize() возвращает информацию о файле.
$size = getimagesize ($filename);
//ширина изображения:
$w=$size['0'];
//высота изображения:
$h=$size['1'];
//mime тип файла:
$type = $size['mime'];
//отношение ширины к высоте, далее будет использовано для пропорционального ресайза изображения
$ratio = $w/$h;
//ширина превью:
$th_w = $width;
//высота превью:
$th_h = $th_w/$ratio;
//передаем браузеру заголовок типа контента:
header("Content-type: $type");
//переключатель типов, возможные варианты изображений: jpg, png и gif:
switch ($type) {
case 'image/jpeg':
//создаем изображение из исходного большого изображения:
$src_img = imagecreatefromjpeg($filename);
//устанавливаем параметры наложения, в данном случае эта строка не пригодится, но она будет нужна, если нужно добавить водяной знак на картинку:
imagealphablending($src_img, true);
//создаем пустое изображение нужной высоты и ширины, в которое будет скопировно исходное изображение:
$thumbImage = imagecreatetruecolor($th_w, $th_h);
//копируем большое изображение в маленькое:
imagecopyresampled($thumbImage, $src_img, 0, 0, 0, 0, $th_w, $th_h, $w, $h);
//выводим в браузер маленькое изображение:
imagejpeg($thumbImage, '', 100);         
break;
//для остальных форматов все аналогично:
case 'image/png':                                                         
$src_img = imagecreatefrompng($filename);
imagealphablending($src_img, true);
$thumbImage = imagecreatetruecolor($th_w, $th_h);
imagecopyresampled($thumbImage, $src_img, 0, 0, 0, 0, $th_w, $th_h, $w, $h);
imagepng($thumbImage, '', 0);               
break;
case 'image/gif':
$src_img = imagecreatefromgif($filename);
imagealphablending($src_img, true);
$thumbImage = imagecreatetruecolor($th_w, $th_h);
imagecopyresampled($thumbImage, $src_img, 0, 0, 0, 0, $th_w, $th_h, $w, $h);
imagegif($thumbImage, '', 100);
break;
default:
//echo "Формат изображения не поддерживается.";
break;  
}
//удаляем изображение из памяти.
imagedestroy($thumbImage);
}
}
Ну вот и все, осталось записать вывод в браузер в нужном месте. Если вы плохо знакомы с ООП, то немного объясню логику. Чтобы создать экземпляр класса imageResize, нужно сделать следующую запись:
$imageObject = new imageResize();
Как только интерпретатор видит такую запись, он вызывает функцию __construct(). Как можно заметить, у этой функции в нашем классе есть два атрибута, $src – относительный путь к изображению, обязательный, $width – необязательный параметр, по умолчанию равен 100, но можно задать свою ширину для превью изображения.
Ну и теперь можно делать вывод превью на странице. Для этого нам понадобится два файла: первый – сам класс imageResize, назовем его imageResize.class.php и файл, на который будет ссылаться атрибут src превью изображения, например resize.php. Положим оба файла в корневую папку сайта. Содержимое файла imageResize.class.php у нас уже есть, нужно просто скопировать код выше. Код файла resize.php будет содержать всего две строки: подключение класса imageResize и создание объекта класса:

<?php
include_once 'imageResize.class.php';
$im = new ImageResize($_GET['src']);
Вторая строка создает объект класса ImageResize() и передает ему путь к большому изображению из $_GET переменной src. Обратите внимание, что данный пример работает в случае, если оба файла лежат в корне сервера, для другой конфигурации прийдется прописать в инструкции include_once путь к классу imageResize.
Ну и самое главное, как же нам вывести на странице собственно превью. Ничего сложного, в коде страницы нужно всего-лишь записать:
<img src=”/resize.php?src=ПУТЬ_К_БОЛЬШОМУ_ИЗОБРАЖЕНИЮ” />
Ну вот и все, теперь у нас есть готовый функционал для создания превью больших картинок, без сохранения превью на сервере.


Ваше имя:
Тема:
Комментарий:
Код с картинки:
Комментарии к статье:
Не удалось выполнить SQL запрос SELECT * FROM comments WHERE art_id='59' AND active='Y'
Не удалось выполнить SQL запрос SELECT * FROM comments WHERE art_id='59' AND active='Y'

комментариев нет
Статьи в разделе

© 2010-2018 При использовании материалов ссылка на сайт www.webchaynik.ru обязательна