libre - Implementación PHP del algoritmo stackblur disponible?
git crlibre (1)
La solución simple es escalar la imagen antes de aplicar el filtro de desenfoque. Aquí hay unos ejemplos:
Imagen original:
20 × desenfoque gaussiano (2.160 segundos):
{
$start = microtime(true);
for ($x=0; $x<20; $x++) {
imagefilter($image, IMG_FILTER_GAUSSIAN_BLUR);
}
$end = microtime(true);
$howlong = $end - $start;
}
Combinación de escalado y desenfoque Gaussiano (0.237 segundos):
{
$start = microtime(true);
/* Scale by 25% and apply Gaussian blur */
$s_img1 = imagecreatetruecolor(160,120);
imagecopyresampled($s_img1, $image, 0, 0, 0, 0, 160, 120, 640, 480);
imagefilter($s_img1, IMG_FILTER_GAUSSIAN_BLUR);
/* Scale result by 200% and blur again */
$s_img2 = imagecreatetruecolor(320,240);
imagecopyresampled($s_img2, $s_img1, 0, 0, 0, 0, 320, 240, 160, 120);
imagedestroy($s_img1);
imagefilter($s_img2, IMG_FILTER_GAUSSIAN_BLUR);
/* Scale result back to original size and blur one more time */
imagecopyresampled($image, $s_img2, 0, 0, 0, 0, 640, 480, 320, 240);
imagedestroy($s_img2);
imagefilter($image, IMG_FILTER_GAUSSIAN_BLUR);
$end = microtime(true);
$howlong = $end - $start;
}
Estoy tratando de difuminar una imagen y necesito una solución más rápida.
Este es mi intento actual, que es demasiado lento para imágenes grandes y no quiero usar imagick.
public function blur($filename, $extension, $factor = 20){
if (strtolower($extension) === "jpg" || strtolower($extension) === "jpeg") $image = imagecreatefromjpeg($filename);
if (strtolower($extension) === "png") $image = imagecreatefrompng($filename);
for ($x=1; $x<=$factor; $x++)
imagefilter($image, IMG_FILTER_GAUSSIAN_BLUR);
imagejpeg($image, "$filename.blur.$extension");
imagedestroy($image);
}
¿Hay una implementación PHP de stackblur u otro algoritmo rápido disponible?