- Racó tècnic - http://www.racotecnic.com -

Clase PHP para tratar imágenes (rotar, redimensionar, añadir marcas de agua..)

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:

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

[3]

$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

[4]

$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

[5]

$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

[6]

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