rica libre hacienda factura electronica crlibre costa api_hacienda php algorithm image-processing

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?