crear marcas de agua con php

Pues hace tiempo que implementé este script para crear marcas de agua en una tienda online para marcar productos como agotados y no me acordaba que lo tenía.
Es un script muy sencillo que usa las librerías GD para manipular las imágenes y superponer una sobre la otra.

Primero es necesario crear una marca de agua en formato PNG. La ventaja principal de éste formato (indispensable en este caso) es que permite 255 niveles de transparencias, por lo que se puede lograr una imagen translúcida. Yo he creado una con la palabra agotado, pero he decir que no es lo mejor que se puede esperar, no soy diseñador y no me gusta estar tocando Photoshop. jejeje bueno es esta la imagen que he usado como marca de agua, obviamente es un ejemplo y se puede usar otra mejor o con otro texto,más grande, etc..

Basta con pasarle el nombre de la imagen a la cual se le desea aplicar la marca de agua a través de la URL…

watermark.php?i=rockers_coffee_pink.jpg
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Implementacion de imagen con marca de agua</title>
</head>
<body>
<h1>Implementacion de imagen con marca de agua</h1>
<p>Imagen sin marca de agua.</p>
<img src="rockers_coffee_pink.jpg" />
<p>Imagen con marca de agua</p>
<img src="watermark.php?i=rockers_coffee_pink.jpg" />
</body>
</html>

Script php que genera la marca de agua

<?php

# root del los archivos
$basedir="/path_completo/a/desarrollo_watermark";
#imagen que hace de watermark, esta imagen es la que he indicado antes.
$watermarkimage="agotado_trans.png";

//print_r($_GET);
$file=basename($_GET['i']);
$path=($_GET['p']);

$image = $basedir."/".$path."/".$file;
$watermark = $basedir."/".$watermarkimage;
$im = imagecreatefrompng($watermark);

$ext = substr($image, -3);

if (strtolower($ext) == "gif") {
    if (!$im2 = imagecreatefromgif($image)) {
        echo "Error opening $image!"; exit;
    }
} else if(strtolower($ext) == "jpg") {
    if (!$im2 = imagecreatefromjpeg($image)) {
        echo "Error opening $image!"; exit;
    }
} else if(strtolower($ext) == "png") {
    if (!$im2 = imagecreatefrompng($image)) {
        echo "Error opening $image!"; exit;
    }
} else {
    die;
}

imagecopy($im2, $im, (imagesx($im2)/2)-(imagesx($im)/2), (imagesy($im2)/2)-(imagesy($im)/2), 0, 0, imagesx($im), imagesy($im));

if($_GET[repeat]) {
    $waterless = imagesx($im2) - imagesx($im);
    $rest = ceil($waterless/imagesx($im)/2);

    for($n=1; $n<=$rest; $n++) {
        imagecopy($im2, $im, ((imagesx($im2)/2)-(imagesx($im)/2))-(imagesx($im)*$n), (imagesy($im2)/2)-(imagesy($im)/2), 0, 0, imagesx($im), imagesy($im));
        imagecopy($im2, $im, ((imagesx($im2)/2)-(imagesx($im)/2))+(imagesx($im)*$n), (imagesy($im2)/2)-(imagesy($im)/2), 0, 0, imagesx($im), imagesy($im));
    }
}

$last_modified = gmdate('D, d M Y H:i:s T', filemtime ($image));

header("Last-Modified: $last_modified");
header("Content-Type: image/jpeg");
imagejpeg($im2,NULL,95);
imagedestroy($im);
imagedestroy($im2);

?>

Resultado de integrar la marca de agua en php en una imagen:

Indicar que este proceso para implementar marcas de agua sobre una imagen no es permanente e irreversible, y alguien que entienda un poco puede sacar la imagen original sin problema, pero este proceso para incluir marcas de agua no está hecho para sellar imágenes originales con marcas de agua duraderas o difíciles de eliminar.

Ver ejemplo: http://www.pedroventura.com/demos/watermark/

Descargar el código, y las imágenes:
zip
Descargar watermark.zip - Descargado 433 veces

Tags de búsquedas:

marca de agua php, marca de agua en php, marca de agua con php, php marca de agua, php crear marca de agua, marca de agua sobre elemento html, marca de agua php codigo, agregar marca de agua con php, javascript para marca de agua, imprimir marca de agua php

Posts Relacionados:


6 Comentarios en “crear marcas de agua con php”

  1. ¡Muchas gracias! Me ha sido útil tu explicación.

  2. dusst dice:

    y que se agrega para que se crée la imagen ya modificada con la marca de agua, para que reemplaze a la imagen original?

  3. giovanni g dice:

    hola..veo que sabes bastante del tema…por eso te hago una pregunta..sabes como colocar una marca de agua a un stream? puede ser un embed de justin, tvope,ustream etc…sabes como hacerlo? …te agradezco tu colaboracion

  4. Ivan dice:

    monto el ejemplo en mi hosting y no me sale la la imagen con l maraca de agua

    http://yoamoacartagena.webcindario.com/

    • Pedro Ventura dice:

      Bueno amigo, si no has modificado ni una linea de código, pues normal!!! Esto no es un “plug and play” un usb que pinchas y listo!

      Hay algunas cosillas que tocar!

      Por ejemplo si voy a tu ejemplo donde lo has implementado y voy a la url que hace la carga de la marca de agua: http://yoamoacartagena.webcindario.com/watermark.php?i=starcraft-2-wings-of-liberty-pc.png

      Veo que te esta fallando todo esto:

      Warning: imagecreatefrompng() [function.imagecreatefrompng]: Unable to access /path_completo/a/desarrollo_watermark/agotado_trans.png in /home/webcindario/y/o/yoamoacartagena/watermark.php on line 14

      Warning: imagecreatefrompng(/path_completo/a/desarrollo_watermark/agotado_trans.png) [function.imagecreatefrompng]: failed to open stream: No such file or directory in /home/webcindario/y/o/yoamoacartagena/watermark.php on line 14

      Warning: imagecreatefrompng() [function.imagecreatefrompng]: Unable to access /path_completo/a/desarrollo_watermark//starcraft-2-wings-of-liberty-pc.png in /home/webcindario/y/o/yoamoacartagena/watermark.php on line 27

      Warning: imagecreatefrompng(/path_completo/a/desarrollo_watermark//starcraft-2-wings-of-liberty-pc.png) [function.imagecreatefrompng]: failed to open stream: No such file or directory in /home/webcindario/y/o/yoamoacartagena/watermark.php on line 27
      Error opening /path_completo/a/desarrollo_watermark//starcraft-2-wings-of-liberty-pc.png!

      Tienes que revisar el código antes, cambia : /path_completo/a/desarrollo_watermark/ por tu path!!

Deja tu comentario

Nombre:

Email (no será publicado)

Website

Comentario

Colabora, añade +1 a mi blog!!