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

Author Автор: Роман Чернышов    Опубликовано: 10 июня 2012

К одной из важных задач при работе с изображениями является изменение их размера, создание миниатюр и привью (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 — качество получаемого изображения

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

Category PHP     Tags

1 Comment to “PHP изменение размера изображения (thumbnail)”

  • Александр 04.07.2017 в 9:25 дп

    Искал в поиске информацию о наложении водяных знаков, а нашёл целый Сайтише с полезной информацией. Когда-то на сайте Вордпресс был плагин с широким функционалом по работе с изображениями. Помимо уменьшения размера (с сохранением оригинала) он имел поля для заполнения имени картинки и описания. Вот бы что-нибудь похожее.

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

Автор блога
Роман Чернышов
Веб-разработчик,
Full Stack
Senior, Architect
PHP, JavaScript, Node.JS, Python, HTML 5, CSS 3, MySQL, Bash, Linux Admin
Заказать работу
предложить оффер

Моя книга
Книга. Веб-разработчик. Легкий вход в профессию
Печатная книга
Веб-разработчик.
Легкий вход в профессию
Купить за 159₽
Последние вопросы
Список вопросов
Последние комментарии
Меню

Archive

Мои проекты
Insurance CMS Love Crm CMS Совместные покупки Мой PHP Framework Хостинг для моих клиентов Лицензии на мой софт и поддержка