jueves, 7 de febrero de 2013

Magick Wand

Hacer un cambio de tamano con MagickWand es algo sencillo, sin embargo solo encontre algunos ejemplos en C; llevarlo a PHP no es muy dificil pero de todas formas dejo aqui el codigo:

Lo que hace es cambiar el tamano de una imagen gif animada. La imagen escalada mantiene la animacion.
$resource = NewMagickWand();
MagickReadImage( $resource, 'coales.gif' );
MagickResetIterator($resource);
while( MagickNextImage($resource) != FALSE )
        MagickScaleImage( $resource, 400, 200 );
MagickWriteImages($resource, 'copy.gif', TRUE);
?>

Cabe resaltar que en vez de MagickScaleImage() se pudo haber usado MagickResizeImage(), pero hice algunas pruebas y usando la primera funcion obtuve el tiempo de ejecuion:
real    0m17.027s
user    0m38.255s
sys     0m2.815s

Y para el segundo (MagickResizeImage)
real    0m21.899s
user    0m44.090s
sys     0m3.000s

Opte por usar el primero pues estoy desarrollando una aplicacion que no debe dejar esperando mucho tiempo a los usuarios y no importa mucho la calidad de imagen. Si se necesita calidad de imagen sugiero usar MagickResizeImage con algun filtro, la seleccion del filtro depende del uso.
http://www.imagemagick.org/Usage/filter/#best_filter
Aqui un articulo que habla de los filtros que se tienen en Magick


Para compilarlo manualmente (normalmente para slackware o gentoo) este articulo indica como hacerlo
www.ioncannon.net/php/75/how-to-compile-imagemagick-for-php-by-hand/