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

Author Роман Чернышов    Category PHP     Tags Комментариев 1 Дата 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 — качество получаемого изображения

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

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

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

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

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

Консультации

Последние вопросы
Меню

Archive

Портфолио Все работы


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