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 — качество получаемого изображения
Таки образом эту функцию легко встроить в любой имеющийся скрипт, в любую систему и наслаждаться получаемыми превьюшками изображений. Без особого труда можно добавить и кэширование и варетмарк.

Автор:







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