PHP изменение размера изображения (thumbnail)

Author Роман Чернышов    Category PHP     Tags Комментариев 0 Дата 10 Июн

resize PHP изменение размера изображения (thumbnail)К одной из важных задач при работе с изображениями является изменение их размера, создание миниатюр и привью (thumbnail). Для решения этой задачи существует множество готовых скриптов и даже целых систем, которые можно интегрировать в свой проект, но как правило все они либо не решают задачи в полной мере, либо перегружены излишним функционалом. Долгое время я использовал phpThumb(http://phpthumb.sourceforge.net), он удовлетворял всем моим требованиям, но в проектах с высокой посещаемостью ощущалось значительно притормаживание, очевидно из-за изобилия излишних для меня функций.

В скором мною был написан собственный php класс, включающий в себя функции изменения размера изображения по заданным пропорциям, наложение ватермарка и кэшированием полученных изображений. В результате весь класс весил 6Кб и состоял из 190 строк кода, скорость его работы меня вполне удовлетворила.

Ниже я хочу поделится одной из PHP функций изменения размера изображения, по заданным пропорциям.

	function img_resize($src, $dest, $width, $height, $rgb = 0xFFFFFF, $quality = 100) {  
	    if (!file_exists($src)) {  
	        return false;  
	    }  
	    $size = getimagesize($src);  
 
	    if ($size === false) {  
	        return false;  
	    }  
 
	    $format = strtolower(substr($size['mime'], strpos($size['mime'], '/') + 1));  
	    $icfunc = 'imagecreatefrom'.$format;  
	    if (!function_exists($icfunc)) {  
	        return false;  
	    }  
 
	    $x_ratio = $width  / $size[0];  
	    $y_ratio = $height / $size[1];  
 
	    if ($height == 0) {  
 
	        $y_ratio = $x_ratio;  
	        $height  = $y_ratio * $size[1];  
 
	    } elseif ($width == 0) {  
 
	        $x_ratio = $y_ratio;  
	        $width   = $x_ratio * $size[0];  
 
	    }  
 
	    $ratio       = min($x_ratio, $y_ratio);  
	    $use_x_ratio = ($x_ratio == $ratio);  
 
	    $new_width   = $use_x_ratio  ? $width  : floor($size[0] * $ratio);  
	    $new_height  = !$use_x_ratio ? $height : floor($size[1] * $ratio);  
	    $new_left    = $use_x_ratio  ? 0 : floor(($width - $new_width)   / 2);  
	    $new_top     = !$use_x_ratio ? 0 : floor(($height - $new_height) / 2);  
 
	    $isrc  = $icfunc($src);  
	    $idest = imagecreatetruecolor($width, $height);  
 
	    imagefill($idest, 0, 0, $rgb);  
 
	    imagecopyresampled($idest, $isrc, $new_left, $new_top, 0, 0, $new_width, $new_height, $size[0], $size[1]);  
 
	    imagejpeg($idest, $dest, $quality);
 
	    imagedestroy($isrc);  
	    imagedestroy($idest);  
 
	    return true;  
}

Вызов функции осуществляется следующим образом:
img_resize($src, $dest, $width, $height, $rgb = 0xFFFFFF, $quality = 100);

где,
$src — путь к текущему изображению на сервере, подлежащего изменению.
$dest — название файла нового изображения (по которому оно будет сохранено на сервере)
$width — требуемая ширина
$height — требуемая высота
$rgb — фон подложки изображения
$quality — качество получаемого изображения

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

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

О блоге и авторе

Добро пожаловать на блог веб-разработчика! На протяжении многих лет, начиная с 2009 года, я занимаюсь созданием специализированных сайтов, сервисов и крупных веб-порталов. Мною было создано несколько сотен сайтов, большинство из которых работают на ПО созданном под заказ, а также на готовом ПО которое я разрабатываю на протяжении всего периода моей деятельности. Это: CMS "Совместные покупки", CMS "osRealty", CMS "Спорт прогнозы" и многое другое.

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

Поиск по блогу
Категории
Архив
Новое на сайте
Блогеры пишут
  • Роман Чернышов: Для работы капчи на PHP 5.6, замените в файле class.captcha.php строку 264 $ifunc( $this -> i [...]
  • Роман Чернышов: Схема такая: 1) На сайте есть виртуальные кошельки (далее ВК) 2) При пополнении пользователем ВК, [...]
  • Александр: Может скрипт комментариев блокирует сообщения с кодом? Или как длинный текст не проходит?
  • Александр: Пытаюсь в который раз здесь показать код, но страница обновляется, и не сообщения, ни любого оповеще [...]
  • Роман Чернышов: Лично у меня интерес к продаже ссылок пропал уже давно. Преимущество сапы, это то - что ссылки можно [...]
Портфолио Все работы

www.detskiy-mir.net
www.detskydoctor.ru
www.betelit.ru
www.all-alliance.ru
www.videogonok.ru
www.carpfishing.by
www.property-greek.com
www.domcons.ru

с 2009 года по сегодняшний день, создано более 300 сайтов...