Actualizado: Tanto la clase como este post han sido actualizados a fecha 14 de enero de 2012.
Hace ya un tiempo publiqué (en inglés) un Componente para el tratamiento de imágenes en CakePHP [1]. Hoy me he pasado un rato actualizándolo y aprovechando he decidido publicar una entrada con los cambios.
Aunque la he modificado considerablemente, he procurado no modificar el funcionamiento de ésta. Aquí vienen los cambios:
- He eliminado el uso del método obsoleto mime_content_type.
- Ahora utilizo la clase Exception para tratar los errores.
- He añadido el método “flip” para hacer espejo de la imagen.
- He limpiado el código y he arreglado algún que otro fallo.
- Ahora las transparencias funcionan correctamente.
Podéis descargar el proyecto desde GibHub:
https://github.com/elboletaire/Watimage/archives/master [2]
Si queréis utilizar la clase desde CakePHP simplemente tenéis que descomentar la primera línea de la clase, donde dice //Component extends Object
, y utilizarlo como un componente cualquiera.
Aplicando marcas de agua
$wm = new Watermark(); $wm->setImage('test.png'); $wm->setWatermark(array('file' => 'watermark.png', 'position' => 'top right')); $wm->applyWatermark(); if ( !$wm->generate('test1.png') ) { // handle error... print_r($wm->errors); }
Redimensionando
$wm = new Watermark('test.png'); $wm->resize(array('type' => 'resizecrop', 'size' => array(400, 200))); if ( !$wm->generate('test2.png') ) { // handle error... print_r($wm->errors); }
Rotando
$wm = new Watermark('test.png'); $wm->rotate(90); if ( !$wm->generate('test3.png') ) { // handle error... print_r($wm->errors); }
Guardando en otros formatos
$wm = new Watermark('test.png'); if ( !$wm->generate('test4.jpg') ) { // handle error... print_r($wm->errors); }
Espejo
$wm = new Watermark('test.png'); $wm->flip('vertical'); if ( !$wm->generate('test5.png') ) { // handle error... print_r($wm->errors); }
Todo junto
$wm = new Watermark('test.png', 'watermark.png'); $wm->resize(array('type' => 'resizecrop', 'size' => 400)); $wm->flip('horizontal'); $wm->rotate(90); $wm->applyWatermark(); if ( !$wm->generate('test6.png') ) { // handle error... print_r($wm->errors); }
Gracias a los comentarios de Francisco [7] he podido arreglar la clase para que trate correctamente las transparencias.
Si véis cualquier fallo hacédmelo saber o haced un fork en github directamente [8]!