[1000programacion] marca de agua

  • From: "Tardo" <tardo@xxxxxx>
  • To: "1000programacion" <1000programacion@xxxxxxxxxxxxx>
  • Date: Fri, 4 Jul 2003 02:50:35 +0200

Posiblemente este no resulte un artículo demasiado práctico para la mayoria
gente, pero seguro que les viene muy bien a todos aquellos que quieran crear
una galeria para mostrar sus fotografias o cualquier otro tipo de creación
gráfica.

Posiblemente los dos únicos métodos fiables para evitar el uso comercial de
nuestras imágenes por un tercero, sean la inclusión de una "marca de agua"
en la misma y el asegurarse que el tamaño y resolución de las imágenes que
mostramos sean insuficientes para cualquier tipo de uso comercial. Este
artículo muestra una forma sencilla de aplicar una "marca de agua" de forma
masiva a tus imágenes.

Actualmente, la única forma de evitar que tus imágenes sean robadas en
internet, es no ponerlas en internet. No existe ninguna otra forma de
evitarlo, pero lo que si que podemos hacer, es poner el mayor número de
obstáculos con el fin de disuadir al 99% de los ladrones.

Una "marca de agua" no es más que una imagen que incrustamos en nuestra
imagen, por lo tanto, para añadir una marca de agua a nuestras imágenes
debemos crear la imagen que hará de "marca de agua". La marca de agua podría
incluir el signo del Copyright, su nombre y apellido. Tampoco debería ser
demasiado grande, al fin y al cabo no queremos ocultar nuestra imagen.
También hay que tener en cuenta que la marca de agua debe tener fondo
transparente y estar en formato PNG.

Si ya has creado la imagen que hará de marca de agua, no falta más que
mostrar el código que se encargara de incrustarla en nuestras imágenes, las
cuales deberían de estar en formato JPEG:



      <?php

        function marcadeagua($img_original, $img_marcadeagua, $img_nueva,
$calidad) {

          // obtener datos de la fotografia
          $info_original = getimagesize($img_original);
          $anchura_original = $info_original[0];
          $altura_original = $info_original[1];

          // obtener datos de la "marca de agua"
          $info_marcadeagua = getimagesize($img_marcadeagua);
          $anchura_marcadeagua = $info_marcadeagua[0];
          $altura_marcadeagua = $info_marcadeagua[1];

          // calcular la posición donde debe copiarse la "marca de agua" en
la fotografia
          $horizextra = $anchura_original - $anchura_marcadeagua;
          $vertextra = $altura_original - $altura_marcadeagua;
          $horizmargen =  round($horizextra / 2);
          $vertmargen =  round($vertextra / 2);

          // crear imagen desde el original
          $original = ImageCreateFromJPEG($img_original);
          ImageAlphaBlending($original, true);

          // crear nueva imagen desde la marca de agua
          $marcadeagua = ImageCreateFromPNG($img_marcadeagua);

          // copiar la "marca de agua" en la fotografia
          ImageCopy($original, $marcadeagua, $horizmargin, $vertmargin, 0,
0, $anchura_marcadeagua, $altura_marcadeagua);

         // guardar la nueva imagen
         ImageJPEG($original, $img_nueva, $calidad);

         // cerrar las imágenes
         ImageDestroy($original);
         ImageDestroy($marcadeagua);
      }

      // aplicamos la funcion a una imagen "original.jpg"

marcadeagua('original.jpg','marcadeagua.png','original_con_marca.jpg',100);

      ?>



La función marcadeagua() incrusta la marca de agua en el centro de la imagen
y recibe 4 parámetros:

1) La ubicación de la imagen original, a la cual queremos aplicar la marca
de agua.

2) La ubicación de la imagen que hará de marca de agua.

3) La ubicación donde queremos guardar la nueva imagen creada.

4) La calidad o compresión que queremos aplicar a la nueva imagen creada. Si
defines el valor como 100, se mantendrá la calidad dela imagen original. Si
le aplicas cualquier valor inferior a 95, la imagen se comprimirá según el
valor indicado y el resultado será una imagen de menor calidad pero también
de menor tamaño en bytes.

Si queremos aplicar la función marcadeagua() a varias imágenes, tendremos
que colocar todas estas imágenes en un mismo directorio y crear otro
directorio donde se guardaran las nuevas imágenes. Posteriormente solo nos
quedará definir dos variables en el siguiente script y ejecutarlo:


      <?php

        // directorio donde se están las imágenes
        $DIR_ORIGINAL = 'c:fotos';

        // directorio donse se guardaran las imágenes nuevas
        $DIR_NUEVA = 'c:fotosnuevas';

        // no limitar el tiempo de ejecución del script, por defecto
        // su valor suelen ser 30 segundos los cuales posiblemente nos
queden cortos
        set_time_limit(0);

        // funcion marcadeagua()
        function marcadeagua($img_original, $img_marcadeagua, $img_nueva,
$calidad) {

          // obtener datos de la fotografia
          $info_original = getimagesize($img_original);
          $anchura_original = $info_original[0];
          $altura_original = $info_original[1];

          // obtener datos de la "marca de agua"
          $info_marcadeagua = getimagesize($img_marcadeagua);
          $anchura_marcadeagua = $info_marcadeagua[0];
          $altura_marcadeagua = $info_marcadeagua[1];

          // calcular la posición donde se debe incrustar la "marca de agua"
          $horizextra = $anchura_original - $anchura_marcadeagua;
          $vertextra = $altura_original - $altura_marcadeagua;
          $horizmargen =  round($horizextra / 2);
          $vertmargen =  round($vertextra / 2);

          // crear imagen desde el original
          $original = ImageCreateFromJPEG($img_original);
          ImageAlphaBlending($original, true);

          // crear nueva imagen desde la marca de agua
          $marcadeagua = ImageCreateFromPNG($img_marcadeagua);

          // copiar la "marca de agua" en la fotografia
          ImageCopy($original, $marcadeagua, $horizmargin, $vertmargin, 0,
0, $anchura_marcadeagua, $altura_marcadeagua);

          // guardar la nueva imagen
          ImageJPEG($original, $img_nueva, $calidad);

          // cerrar las imágenes
          ImageDestroy($original);
          ImageDestroy($marcadeagua);
        }

        $dir = opendir($DIR_ORIGINAL);

        while(false !== ($file = readdir($dir))) {
          if (!is_dir($file) && $file != '.' && $file != '..' &&
exif_imagetype($file)==2) {

            // aplicar funcion

marcadeagua($DIR_ORIGINAL.'/'.$file,'marcadeagua.png',$DIR_NUEVA.'/'.$file,1
00);
          }
        }
        closedir($dir);

      ?>




Como ya he comentado, la funcion marcadeagua() incrusta la marca de agua en
el centro de la imagen. Si prefieres que lo incruste en cualquier otra
parte, en la esquina inferior derecha por ejemplo, tendrás que modificar la
función. Para ello debes tener en cuenta que la función ImageCopy() es la
que se encarga de copiar la marca de agua en la imagen original, por lo
tanto es aconsejable que leas la documentación de esta función.

Bueno, espero que halla servido de algo.

Aviso: Para que esto funcione es necesario que tu instalación de PHP soporte
la librería GD.

----------------------------------------------------------------------------
--------------------------------------------------------
Este articulo ha sido sacado de otro, que a su ve lo saco al parecer del:
http://guebmaster.com/articulo.php/102



Other related posts:

  • » [1000programacion] marca de agua