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, Architector
PHP, JavaScript, Python, HTML 5, CSS 3, MySQL, Bash, Linux Admin
Заказать работу
предложить оффер

Последние вопросы
Список вопросов
Последние комментарии
Меню

Archive

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