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]!



