Superposición de marca de agua PHP. Agregar una marca de agua a una foto usando PHP. Seleccionar un método de marca de agua

Internet está presente un gran número de imágenes, que generalmente son cargadas por los propietarios o usuarios del sitio. Dependiendo de su relevancia, la imagen puede migrar de un sitio a otro. Sin mencionar los derechos de autor, no a todos los propietarios de sitios les puede gustar el hecho de que las imágenes de su sitio se copien en otros recursos. Como medio para combatir la copia banal de imágenes de sitios, se inventó aplicar marcas de agua a las imágenes, indicando que la imagen pertenece a un recurso en particular. Esto puede ser especialmente cierto para sitios que tienen una gran cantidad de imágenes únicas.

Veamos un ejemplo de código que demuestra la aplicación de una marca de agua a las imágenes descargadas.

Entonces, las configuraciones principales están contenidas en forma de constantes y aparecen primero en el código:

// ruta a la imagen de la marca de agua define("WATERMARK_OVERLAY_IMAGE", "/lab/watermark/watermark.png"); // Compresión, rango 0-100 (afecta la calidad de la imagen) define("WATERMARK_OUTPUT_QUALITY", 100); // carpeta con imágenes de origen define("UPLOADED_IMAGE_DESTINATION", "/lab/watermark/upload/src/"); // carpeta con imágenes procesadas define("WATERMARK_IMAGE_DESTINATION", "/lab/watermark/upload/");

En la página colocaremos un formulario de carga de imágenes, con el cual se enviarán las imágenes al servidor.
Código de formulario:

Seleccionar archivo de imagen:
Imagen original
" estilo="ancho máximo: 300px;" />
Imagen con marca de agua
" estilo="ancho máximo: 300px;" />

Bueno, ahora lo más importante son las funciones para el procesamiento de imágenes. Estas funciones deben colocarse antes de mostrar el formulario en la página.

Dos funciones clave, con una, la imagen se carga en el servidor, con la otra, se aplica una marca de agua. Quizás los comentarios sobre las funciones se describan con más detalle y sería superfluo escribir lo mismo aquí.

Si desea agregar una marca de agua a una foto sin molestarse con los editores de imágenes o agregarla mientras carga fotos en el servidor, entonces este tutorial es para usted.

En este tutorial, le mostraré cómo agregar una marca de agua a una imagen sobre la marcha sin cambiar la imagen original. En primer lugar, necesitará una imagen para utilizarla como marca de agua.

Luego formamos el encabezado del archivo:

// esta línea le indicará al navegador que estamos pasando un encabezado de imagen jpg("content-type: image/jpeg");

Luego generamos una imagen png y obtenemos sus dimensiones:

// crea una marca de agua en formato png $watermark = imagecreatefrompng("watermark.png"); // obtiene el ancho y el alto $watermark_width = imagesx($watermark); $watermark_height = imágenesy($watermark);

Haremos lo mismo con la imagen original, pero sólo en formato jpg. Esto es común para las fotos que se cargan a través de un formulario. Procedemos de la siguiente manera:

// creando una imagen jpg $image_path = "original.jpg"; $imagen = imagecreatefromjpeg($image_path); // obtener el tamaño de la imagen $size = getimagesize($image_path);

Ahora necesitamos colocar una marca de agua en la imagen:

// coloca una marca de agua en la parte inferior derecha. Sangría 5px $dest_x = $tamaño - $watermark_width - 5; $dest_y = $tamaño - $watermark_height - 5;

A continuación, configuremos las opciones de fusión para ambas imágenes:

Imagealphablending($imagen, verdadero); imagealphablending($marca de agua, verdadero);

Finalmente creamos una nueva imagen usando los parámetros:

// crea una nueva imagen imagecopy($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height); imagenjpeg($imagen);

Es importante limpiar lo que ensucia:

// libera memoria imagedestroy($image); imagedestroy($marca de agua);

Puede utilizar Photoshop para ajustar la transparencia de la marca de agua.

Eso es todo con teoría. Ahora apliquemos nuestro conocimiento a un proyecto real. Todo esto debe guardarse en un archivo. Por ejemplo, llamado marca de agua.php

Encabezado("tipo de contenido: imagen/jpeg"); // obtener el nombre de la imagen mediante GET $image = $_GET["image"]; // crea una marca de agua $watermark = imagecreatefrompng("watermark.png"); // obtiene el alto y el ancho de la marca de agua $watermark_width = imagesx($watermark); $watermark_height = imágenesy($watermark); // crea un jpg a partir de la imagen original $image_path = "/path/to/image/folder/" . $imagen; $imagen = imagecreatefromjpeg($image_path); //si algo sale mal if ($image === false) ( return false; ) $size = getimagesize($image_path); // coloca una marca de agua en la imagen $dest_x = $size - $watermark_width - 5; $dest_y = $tamaño - $watermark_height - 5; imagealphablending($imagen, verdadero); imagealphablending($marca de agua, verdadero); // crea una nueva imagen imagecopy($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height); imagenjpeg($imagen); // libera memoria imagedestroy($image); imagedestroy($marca de agua);

Ahora, para mostrar una foto con una marca de agua sin cambiar la imagen original, use el siguiente código.

Los propietarios de sitios web (foros, foros de mensajes, etc.) a menudo se enfrentan al problema de crear marcas de agua en todas las imágenes grandes del sitio.

Por supuesto, este problema se puede resolver creando manualmente una marca de agua en cada imagen; sin embargo, en primer lugar, esto lleva mucho tiempo y, en segundo lugar, es necesario almacenar dos versiones de la imagen, con y sin marca de agua.

Una solución a este problema puede ser aplicar dinámicamente una marca de agua a la imagen antes de transmitirla al visitante del sitio.

Existe una solución a este problema en Internet en forma de dos archivos, cuyo contenido se detalla a continuación.
Código fuente del archivo ".htaccess"

DirectoryIndex index.php RewriteEngine en RewriteCond %(REQUEST_FILENAME) -f RewriteRule ^(.*)$ /watermark/_watermark.php

Código fuente del archivo "_watermark.php"

250) && ($info_o > 250)) ( // Para imágenes sin canal alfa // El último parámetro de la función es el grado de opacidad de la marca de agua imageCopyMerge($out, $watermark, ($info_o-$info_w)/ 2, ($info_o -$info_w)/2, 0, 0, $info_w, $info_w, 25); // Para imágenes con canal alfa // En este caso, la transparencia se ajusta por el canal alfa de la imagen. sí mismo // imageCopy($out, $watermark, ($info_o-$info_w)/2, ($info_o-$info_w)/2, 0, 0, $info_w, $info_w ) cambiar ($info_o) ( caso 1: imageGIF($out); caso 2: imageJPEG($out); imagePNG($out); imageDestroy($original); imageDestroy($marca de agua); devolver verdadero; ) ?>

La solución se reduce a lo siguiente: el archivo “.htaccess” se coloca en el directorio con los archivos de imagen. Además, se crea una carpeta de "marca de agua" en el servidor, en la que hay un archivo de script "_watermark.php" y el archivo de marca de agua real "watermark.png".

Al mismo tiempo, en comparación con la versión original encontrada en Internet, realicé cambios menores en ambos archivos de texto.

En el archivo ".htaccess", se ha añadido la extensión "jpeg" a la expresión regular para buscar archivos de imágenes, como también se encuentra con frecuencia.

El script "_watermark.php" ha sido reelaborado de tal manera que coloca la marca de agua en el centro de la imagen (esto era requerido por las características específicas del problema que se estaba resolviendo) y se ha agregado la capacidad de ajustar la transparencia de la marca de agua creada. (los comentarios en el cuerpo del script le ayudarán a configurar este parámetro usted mismo).

También debes prestar atención al hecho de que colocando la carpeta "marca de agua" en la carpeta con imágenes, como aconsejan las fuentes originales, no lograremos el resultado deseado, porque en este caso tendremos que tener su propio archivo ".htaccess" y carpeta "marca de agua" en cada carpeta. Esto se debe al hecho de que el archivo ".htaccess" especifica rutas absolutas desde el directorio raíz del sitio al archivo "_watermark.php". Por lo tanto, al tener una subcarpeta de “marca de agua” separada en cada carpeta con imágenes, si necesitamos cambiar la marca de agua (o el script que la superpone en la imagen), tendremos que realizar cambios en todas las carpetas.

Para evitar este problema, recomiendo crear una carpeta de "marca de agua" en el directorio raíz del sitio y colocar un archivo ".htaccess" en los directorios de imágenes sin tener que cambiarlo cada vez. En este caso, para cambiar la marca de agua o el script, necesitaremos realizar cambios en un solo lugar del sitio. En este caso, puede crear diferentes marcas de agua para diferentes carpetas con imágenes haciendo referencia desde diferentes archivos “.htaccess” a diferentes scripts, por ejemplo “_watermark-1.php”, “_watermark-2.php”, etc.

Por lo tanto, para resumir, podemos decir que para aplicar marcas de agua a todas las imágenes del sitio, debe descargar el archivo adjunto a continuación, descomprimirlo, colocar la carpeta "marca de agua" en el directorio raíz del sitio y reemplazar el archivo de marca de agua ". watermark.png” con el suyo propio y coloque el archivo ".htaccess" en esos directorios de sitios, cuyas imágenes deben tener una marca de agua.

Puede descargar el archivo que contiene todos los archivos necesarios en este

Corres un gran riesgo cuando publicas tus imágenes y vídeos en Internet, ya que tus materiales se pueden copiar fácilmente a cientos de otros recursos. No estaría muy bien encontrar tu foto para una noticia, por ejemplo, en la que has trabajado duro, en otro sitio sin indicar la fuente, es decir, tu sitio, ¿verdad? Por decirlo suavemente, te enojarás, y si no fuera una simple imagen para las noticias, sino un trabajo complejo en Photoshop, ¡decir que te enojarás es no decir nada! Entonces, ¿qué puedes hacer para proteger tus gráficos?

Para proteger los derechos de autor de imágenes o vídeos en Internet, se suele utilizar una marca de agua digital o marca de agua digital por conveniencia. Adjunte una firma digital a cada imagen cargada para protegerla. El CEZ puede ser el logotipo de su sitio web o empresa, colocado de manera hermosa y estética en las imágenes cargadas.

Primero creemos un archivo que contenga las configuraciones necesarias en forma de constantes: /config.php:

Define("WATERMARK_OVERLAY_IMAGE", "/develop/images/watermark.png"); // Ruta a tu Sala Central de Exposiciones define("WATERMARK_OUTPUT_QUALITY", 100); // Calidad de la imagen resultante de la grabación de vídeo digital. Recuerde que la calidad afecta directamente al tamaño del archivo. define("UPLOADED_IMAGE_DESTINATION", "/desarrollo/carpeta1/"); // Ruta a la ubicación de las imágenes cargadas originales define("WATERMARK_IMAGE_DESTINATION", "/develop/folder2/"); // Ruta a imágenes con forma de onda digital superpuesta

Recopilemos los archivos creados anteriormente en el archivo que ejecuta la descarga. /cargar.php

Incluir("config.php"); incluir("funciones.php"); $resultado = ImageUpload($_FILES["userfile"]["tmp_name"], $_FILES["userfile"]["name"]); if ($resultado === false)( echo "¡Error en la descarga!"; )

Por ejemplo, si la imagen que se estaba cargando era:

Luego, después de descargar y aplicar una marca de agua, obtendrá la siguiente imagen:

En este ejemplo, la imagen descargada se guarda en una carpeta y la imagen a la que se superpuso la marca de agua digital en otra, para que siempre tengas acceso a las imágenes originales, pero, por supuesto, vale la pena publicar imágenes de la carpeta digital. exposición en el sitio.

(178,4 KiB, 989 visitas)

En algunos casos, agregar marcas de agua a las imágenes que publica en su sitio es la única forma de protegerlas de alguna manera contra el robo. Además, dicen que este tipo de marcas de agua atraen tráfico adicional.

Hay muchas formas de crear una marca de agua en una imagen usando PHP, pero mi cliente necesitaba un método de aplicación que le permitiera cambiar la marca de agua por una nueva en cualquier momento.

Resulta que existe esa solución.

Esto suele ser utilizado por personas que desarrollan sitios web con contenido principalmente gráfico.

Seleccionar un método de marca de agua

El problema de implementar todo este lío es elegir cómo aplicar la marca de agua entre rendimiento y flexibilidad. Simplemente no existe una solución ideal que se adapte a todos. Por eso hay muchas implementaciones.

En mi caso, el cliente se reserva el derecho de cambiar la marca en cualquier momento y en su lugar "Cuernos y pezuñas" escribir “Pezuñas y cuernos”. El método de marca de agua que elija también debería tolerar esto.

La esencia de la tecnología de marca de agua que se describe aquí es agregar esta misma marca cada vez que se carga una imagen. Sí, este método conlleva una serie de limitaciones que pueden afectar significativamente el rendimiento, pero como dicen, el cliente siempre tiene la razón y, por tanto, si las tiene. la tarea requiere aplicar dinámicamente una marca de agua, entonces esto es exactamente lo que hay que hacer.

Si alguien tiene una manera más fácil, puede comentar. Será interesante escuchar.

Antes de presentar algún código, me gustaría describir las ventajas y dar un ejemplo práctico.

Ventajas:

  • puedes cambiar la marca de agua al menos 500 veces al día;
  • se puede implementar en cualquier CMS (no está vinculado a él de ninguna manera).

Desventajas:

  • depende del rendimiento del hosting (si tienes muchas imágenes o son de alta resolución, esto puede suponer una carga significativa para el servidor);
  • una mente curiosa aún podrá eliminar su marca de agua.

Conclusiones: Para publicar una pequeña cantidad de imágenes con marcas de agua, este método es perfecto, pero si vas a abrir una galería de fotos, sería mejor buscar algo menos cargado.

Ejemplo

Implementando una marca de agua usando PHP

Como te prometimos, no necesitas tener ningún conocimiento especial para esto, necesitas:

  1. archivo, que está en el archivo, y colóquelo en el directorio raíz de su sitio;
  2. Colocamos la imagen que actuará como marca de agua en el directorio raíz del sitio y le asignamos un nombre (en mi caso es un trazo de pincel blanco, por lo que es posible que el enlace no sea visible en el fondo de su navegador). La imagen debe ser un PNG, ya que tiene una capa transparente. Si desea utilizar GIF, debe editar el archivo. imagen.php;
  3. en el lugar donde deseas mostrar la imagen con la marca de agua coloca el código:

Eso es todo. Todos contentos, tanto usted como el cliente.

Explotación