Ejercicio 5. Mi primer helper CakePHP: el turbo thumbnail, o el turbo miniaturizador de imágenes.

Hoy me he dedicado a buscar en Internet cómo se pueden miniaturizar imágenes al vuelo y he descubierto la librería GD. También he agregado a mis favoritos este tutorial, que explica de una forma muy amena cómo utilizar sus funciones. Claro, al ver todo esto me he emocionado y he pensado que podrían programarse algunos ayudantes HTML con las funciones de la librería GD para obtener los mismos efectos que explica Sargento aquí, pero en CakePHP.

Como no sabía si esto ya está hecho o si se puede hacer, en algún momento me puse a hacer pruebas. El resultado fue un poco desastroso y conseguí armar algo que parecía funcionar, pero que en vez de imprimir imágenes en la pantalla imprimía letras y números.

Seguí buscando en Internet y consulté al oráculo, el fantástico grupo Google CakePHP en español.  Aquí descubrí este artículo, que me ha servido de inspiración para construir mi turbo miniaturizador de imágenes:


class ImagenHelper extends Helper{

   function redimensionar($imagen, $altura){

      $tamano = getimagesize('img/'.$imagen);

      return $this->output('<img src="/img/'.$imagen.'" height="'.$altura.'" width="'.intval($tamano&#91;'0'&#93;*$altura/$tamano&#91;'1'&#93;).'"/>');

   }

De momento, el turbo miniaturizador funciona, y se puede llamar en una vista así:


echo $html->link($imagen->redimensionar('imagen.jpg',200), '/empresas/editar_imagen/'.$empresaId, array(), false, false, null );

También se puede llamar sin poner un enlace, por supuesto, así:


echo $imagen->redimensionar('imagen.jpg',200);

Este helper thumbnail sólo necesita dos cosas: la ruta de la imagen original y la altura en píxels de la miniatura. La función getimagesize de PHP obtiene la altura y la anchura de la imagen original, y el helper guarda la matriz asociativa que genera esta función en $tamano. En $tamano[‘0’] tenemos la anchura en píxels de la imagen original y en $tamano[‘1’] tenemos su altura; la operación


 intval($tamano['0']*$altura/$tamano['1'])

recupera la parte entera de la regla de tres que aplicamos para obtener la anchura correspondiente a la altura.

En otras palabras, el turbo miniaturizador de imágenes -o helper thumbnail- toma la altura en píxels que el usuario quiere y calcula su anchura proporcional. Para una fotografía de 1024 x 800 y una altura de 10 píxels para la miniatura el helper hace 1024 x 10 / 800.

Creo que no es necesario añadir nada más y queda mono en una sola línea. Sí, me voy a arriesgar a probarlo, jeje. ¿Y tú? Me haría ilusión que probaras mi primer helper y lo comentaras, pero recuerda: si se produce un error catastrófico tú eres el único responsable.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: