Функция cot_imagesharpen используется для улучшения резкости изображения после изменения его размеров. Это полезно, например, когда изображение становится размытым или теряет чёткость из-за ресайза.
/**
* Sharpen an image after resize
*
* @param resource $imgdata Image resource from an image creation function
* @param int $source_width Width of image before resize
* @param int $target_width Width of image to sharpen (after resize)
* @return resource - image resource
*/
function cot_imagesharpen($imgdata, $source_width, $target_width)
{
$s = $target_width * (750.0 / $source_width);
$a = 52;
$b = -0.27810650887573124;
$c = .00047337278106508946;
$sharpness = max(round($a+$b*$s+$c*$s*$s), 0);
$sharpenmatrix = array(
array(-1, -2, -1),
array(-2, $sharpness + 12, -2),
array(-1, -2, -1)
);
imageconvolution($imgdata, $sharpenmatrix, $sharpness, 0);
return $imgdata;
}
Разбор функции cot_imagesharpen
Параметры функции:
$imgdata — ресурс изображения, полученный от одной из функций создания изображений, таких как imagecreatefromjpeg, imagecreatefrompng или imagecreatefromgif. Это изображение, которое нужно улучшить по резкости.
$source_width — исходная ширина изображения, до изменения размера.
$target_width — ширина изображения после изменения размера. Эта величина используется для расчёта степени резкости, которая должна быть применена.
Логика работы:
Расчёт коэффициента резкости:
Для корректной настройки степени резкости используется зависимость от ширины изображения до и после изменения размера.
Переменная $s — это масштабный коэффициент, который вычисляется как отношение ширины целевого изображения к исходной ширине, умноженное на 750 (этот коэффициент был подобран эмпирически).
Настройка матрицы для повышения резкости:
Для повышения резкости применяется матрица свёртки. Она представляет собой фильтр, который усиливает контуры изображения, делая его более чётким.
Используется матрица с отрицательными значениями для окружающих пикселей, и положительное значение для центрального пикселя. Это помогает создать эффект резкости.
$sharpness — это вычисленный уровень резкости на основе ширины изображения и коэффициентов (a, b, c).
Применение матрицы свёртки:
Функция imageconvolution() выполняет свёртку изображения с заданной матрицей. Эта операция применяет фильтр резкости к изображению.
Возврат изображения:
После применения матрицы свёртки и повышения резкости функция возвращает ресурс изображения с улучшенной резкостью.
Пример использования:
Функция используется внутри другой функции, которая изменяет размер изображения (например, cot_imageresize), и после ресайза передаёт результат в cot_imagesharpen для улучшения резкости.
Пример применения:
$canvas = ($sharpen) ? cot_imagesharpen($canvas, $source_width, $target_width) : $canvas;
Здесь:
$canvas — это ресурс изображения после изменения его размеров.
$source_width — исходная ширина изображения.
$target_width — целевая ширина изображения (после изменения размеров).
Если флаг $sharpen установлен в true, то изображение будет передано в функцию cot_imagesharpen, чтобы улучшить резкость. В противном случае, изображение остаётся без изменений.
Заключение:
Функция cot_imagesharpen представляет собой специализированный фильтр для улучшения качества изображения, что особенно полезно после изменения его размера, когда изображение может стать размытым или менее чётким.