Marcas de agua con PHP
1 COMENTARIO - Publicado hace 14 meses - Clasificado en: PHP, TUTORIALES, TIPSEn una entrada anterior se mostraba como añadir una marca de agua con CSS. Una forma más efectiva de realizar las marcas de agua es aprovecharnos de las posibilidades que nos ofrece PHP y GD.
Lo primero que deberemos hacer es, con un editor de imágenes, realizar un fichero que funcionará a modo de marca de agua. Desde la versión 2.0 de GD, éste ha eliminado la compatibilidad con ficheros GIF, por lo que lo mejor es realizar un fichero en formato .PNG. El utilizado para el ejemplo que aquí se mostrará se denomina "marca_de_agua.png" y es éste:
Almacenamos la imagen dentro de una variable:
$ruta_marca = 'marca_de_agua.png';
$watermark = imagecreatefrompng($ruta_marca);
Ahora procederemos a crear el fichero JPEG final -con marca de agua- a partir de una imagen inicial que almacenaremos en la variable $imagen.
$ruta_imagen = 'Tulipanes.jpg';
$imagen = imagecreatefromjpeg($ruta_imagen);
La variables $ruta_imagen y $ruta_marca deberán incluir las ruta necesarias para acceder a ambos ficheros.
Lo siguiente que hacemos es, obtener las dimensiones de la imagen, sustraer las dimensiones de la marca de agua y, dejando un margen de 10 px, obtener las posiciones x e y sobre las que se colocará la marca de agua.
$tamanyo_imagen = getimagesize($ruta_imagen);
$tamanyo_marca = getimagesize($ruta_marca);
$dest_x = $tamanyo_imagen[0] - $tamanyo_marca[0] - 10;
$dest_y = $tamanyo_imagen[1] - $tamanyo_marca[1] - 10;
Ahora tan sólo queda unir la imagen y la marca de agua. Para ello nos valemos de la función imagecopymerge. La sintaxis es:
imagecopymerge ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h , int $pct )
Lo que hace es copiar $src_im en $dst_im, comenzando en las coordenadas x e y especificadas en src_x, src_y, con un ancho y alto especificados en $src_w y $src_h y unidas de acuerdo con el pct especificado. Más información acerca de imagecopymerge.
En nuestro caso quedaría del siguiente modo:
imagecopymerge($imagen, $watermark, $dest_x, $dest_y, 0, 0,$tamanyo_marca[0], $tamanyo_marca[1], 100);
Para, finalmente mostrar la imagen resultante necesitaremos estas tres líneas de código:
imagejpeg($imagen); //Mostrar la imagen
imagedestroy($imagen); //Libera la memoria asociada a la imagen imagedestroy($watermark); //Libera la memoria asociada a la imagen
El código final sería, añadiendo el content-type apropiado sería:
<?php
header('content-type: image/jpeg');$ruta_marca = 'marca_de_agua.png';
$watermark = imagecreatefrompng($ruta_marca);$ruta_imagen = 'Tulipanes.jpg';
$imagen = imagecreatefromjpeg($ruta_imagen);$tamanyo_imagen = getimagesize($ruta_imagen);
$tamanyo_marca = getimagesize($ruta_marca);$dest_x = $tamanyo_imagen[0] - $tamanyo_marca[0] - 10;
$dest_y = $tamanyo_imagen[1] - $tamanyo_marca[1] - 10;
imagecopymerge($imagen, $watermark, $dest_x, $dest_y, 0, 0,$tamanyo_marca[0], $tamanyo_marca[1], 100);imagejpeg($imagen);
imagedestroy($imagen);
imagedestroy($watermark);
?>
Ver ejemplo en funcionamiento » »
Algunas entradas relacionadas:
- Listar, filtrando por extensión, los ficheros de una carpeta con PHP
- Alternar colores en las filas de una tabla con PHP
- Trabajar con PHP y directorios
- Exportar tablas HTML a Excel con PHP y JQuery
- PclZip: clase para trabajar con ficheros zip en php
- Forzar la descarga de imágenes con PHP
- Listar todos los ficheros de un directorio con PHP
También te puede interesar:
| Cómo crear una tarjeta de Navidad en Photoshop | Convierte tu firma en una forma de Photoshop | Speccy: averigua todo el hardware de un ordenador | Super Finder XT | La jornada intensiva todos los días del año es posible |
COMENTARIOS
|
|
Publicado hace 4 meses mauro - http://www.minicio.com.ar gracias capo, lla verdad que muy bien explicado , muy bueno el ejemplo y te felicito por la web esta muy bonita . saludos. |





















Andres en Arte vs Diseño




