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. 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

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

1
2
3
4
5
6
7
8
9
<?php
$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

1
2
3
4
5
6
$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

1
2
3
4
5
6
$wm = new Watermark('test.png');
$wm->rotate(90);
if (!$wm->generate('test3.png')) {
  // handle error...
  print_r($wm->errors);
}

Guardando en otros formatos

1
2
3
4
5
$wm = new Watermark('test.png');
if (!$wm->generate('test4.jpg')) {
  // handle error...
  print_r($wm->errors);
}

Espejo

1
2
3
4
5
6
$wm = new Watermark('test.png');
$wm->flip('vertical');
if (!$wm->generate('test5.png')) {
  // handle error...
  print_r($wm->errors);
}

Todo junto

1
2
3
4
5
6
7
8
9
$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 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!