Marcas de agua automáticas con PHP y GD

Escrito por Federico H. García el Jueves 05 de Mayo de 2005 a las 00:00hs

En todos los foros dedicados al desarrollo web hay por lo menos un thread dedicado al tema de proteger al contenido del sitio web o su c?digo fuente de ser guardado por el usuario. Si bien existen varios programas que ocultan el c?digo (e incluso algunos llegan a prohibir los clicks del bot?n derecho del mouse), siempre se llega a la conclusi?n de que proteger el contenido de un sitio es imposible (protegerlo para todos los usuarios, claro que siempre se pueden usar m?todos de autenticaci?n).

Lo mismo pasa con las im?genes: se pueden guardan desde los temporales (suponiendo que por alg?n extra?o motivo no se pueda desde el browser directamente), o simplemente haciendo una captura de pantalla.

En conclusi?n, todo lo que llega a la pantalla del usuario le pertenece y puede hacer con eso lo que quiera.

Sin embargo, lo que se suele hacer a la hora de proteger im?genes es aplicarles una marca de agua, es decir, una im?gen transl?cida que indica que la im?gen no puede ser usada en otro sitio, para fines comerciales, etc.

Y es ah? donde la librer?a GD para tratamiento de im?genes entra en juego. Usando dicha librer?a, un poco de PHP y la magia de los PNG's se puede automatizar la tediosa tarea de aplicar marcas de agua a diferentes im?genes.

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 im?gen transl?cida.

Una vez creada la marca, se puede aplicar en la im?gen usando PHP. Pueden ver el c?digo aqui...


$image = $_GET['i'];
$watermark = "water.png";

$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));
}
}

header("Content-Type: image/jpeg");
imagejpeg($im2);
imagedestroy($im);
imagedestroy($im2);

?>

Basta con pasarle la URL de la im?gen a la cual se le desea aplicar la marca de agua a trav?s de la URL...


watermark.php?i=brown_lady.jpg

Tambi?n pueden probar pas?ndole la variable repeat para que repita la marca de agua horizontalmente...


watermark.php?i=brown_lady.jpg&repeat=t

Claro que es muy importante que restringan el acceso al directorio en donde se alojan las im?genes originales. Un simple .htaccess con la sentencia deny from all deber?a ser suficiente (en servers apache, claro).

Es importante tener en cuenta que el m?todo no es infalible, cualquier persona con experiencia en el uso de un buen editor de im?genes puede remover la marca sin dejar rastro.


comentarios



  1. Estoy pez en esto de PHP, así antes de nada perdón por mi ignorancia o atrevimiento en preguntar algo, que pudiera trivial. Tengo conocimientos de Javascript y empezando ahora con el aprendizaje de PHP. Veo similitudes en ambos lenguajes por lo que siempro tiendo a analizar el código tratanto de vislumbrar que es lo que significa. En este caso se me dio por plantearme la cuestión siguiente: ¿Es posible colocar dicha marca de agua en una esquina de la imagen, por ejemplo en la esquina inferior derecha? ¿O siempre tiene que estar centrada? ¿Cual es el trozo de código que maneja dicho parametro?
    De antemano, gracias por tu tiempo y paciencia. Saludos y enhorabuena por el renovado diseño (hace tiempo que no me pasaba)



  2. yo no entiendo q es una marca de agua . expliquen



  3. Y PARA LOS QUE QUIERAN UN PROGRAMA QUE PONGA MARCAS DE AGUA AUTOMATICAMENTE A VARIAS FOTOS O UNA SOLA, LES RECOMIENDO QUE BUSQUEN EN EL GOOGLE, ESCRIBAN MARCA DE AGUA Y APARECERAN VARIAS DIRECCIONES....O BUSQUEN EN SOFTONIC....NO SEAN FLOJOS, CUANDO NO SEPAN ALGO USEN EL GOOGLE, PRIMERO AGOTEN TODOS LOS RECURSOS QUE OFRECE INTERNET, Y SI NO OBTIENEN RESULTADOS, ENTONCES AHI RECIEN PIDAN AYUDA...EL GOOGLE ES UNA BUENA HERRAMIENTA DE BUSQUEDA Y ENCUENTRA CASI TODO.
    Y PARA EL QUE PREGUNTA , QUE ES UNA MARCA DE AGUA LE RESPONDO QUE BUSQUES EN EL GOOGLE O HAGAS UN GRAN ESFUERZO HACIENDO CLIC EN EL LINK QUE DI MAS ARRIBA Y APRENDERAS ALGO MAS SOBRE TU DUDA...
    MAS FACIL NO PUEDE SER CIERTO ???



  4. A mi no me tira :D



  5. hola me parece muy bien el codigo lo probe, pero tengo una duda si la marca de agua se puede hacer cuando quieran guardar la foto en su pc, que la marca de agua no aparesca cuando muestro la imagen enuna consulta por ejemplo me muestre la foto normal, .



  6. necesito hacer correr php en windows hace dos semanas que no puedo solo corre el html y nada el php como puedo solucionar mi problema le agradeceria mucho que me ayude



  7. se puede poner marcas de agua a una imagen PNG de este mismo modo ?

  8. Tecnico en Sistemas y Redes:
    Sabado 05 de Abril de 2008 a las 12:48hs


    CORRER PHP EN WINDOWS

    Respecto a la pregunta de correr un sitio php en Windows, principalmente necesitas un gestor o un motor que pueda ejecutar las aplicaiones html y que al mismo tiempo incluyen o poseen codigo php en la pagina, sino solo aparece el html pro hay programas que simulan tener un pequeño servidor php que levantas esas aplicaciones y yo te recomendaria PhpMyAdmin el cual es libre y puedes instalarlo en tu Pc para probar tus aplicaiones, espero te ayude en algo sino especifica que quieres hacer realmente y veremos que hacer.

    Samuel Tecnico en Sistemas y Redes Informaticas



  9. amigo. me parecio exelente el codigo..

    bueno probandolo me funciono muy bien..
    tengo una duda.. porque por lo que me di cuenta. esto no graba una imagen con el sello de agua sino. solo te la fuciona.. porque no crea ninguna imagen especial...
    solo pone el sello sobre la original.. pero si alguien averigua la direccion real de la imagen igual la podrian copiar sin el sello..
    mi consulta es.. es posible ademas guardar esta imagen??
    reemplazar la original y guardarla.??


    salu2



  10. He recorrido google y aun no doy.... me sirve de granb ayuda este codigo pero no lo puedo aplicar y aun no encuentro la forma para colocarla a imagenes de resultados de busquedad como por ejemplo una url como esta: http://www.906090.com.ec/im.php?id=11326 como eran no termina en image.jpg o nombre de imagen.gif, como podria aplicar a direcciones como esta...... Esto es para alicarlo en mi web www.906090.com.ec..


    Saludos



  11. DUda, funciona bien y demas, pero... como hago para q funcione con los gif? y png o demas... solo funciona en jpg, el resto me sale en blanco, solucion?

    Gracias



  12. el tecnico en redes que dijo que PHPMYADMIN es un servidor favor de estudiar mas... gracias... o googlear mas... o simplemente no hablar...



  13. Necesitas un servidor web, como apache o IIS, phpMyAdmin es un sistema hecho en PHP para trabajar con MYSQL



  14. CORRER PHP EN WINDOWS
    El técnico en Redes que piensa que phpMyAdmin ejecutará PHP en Windows, supongo que tendrá bastantes trabajos por terminar. Me gustaría que me explicara cómo instala phpMyAdmin en Windows SIN UN SERVIDOR DE PHP.

    Para responder... Yo utilizo EasyPHP en Windows para hacer las pruebas locales de PHP sin estar conectado a Internet. Es muy fácil de instalar y de usar. Además, instala MySQL y phpMyAdmin. Descarga el EasyPHP, instálalo y podrás ejecutar código PHP bajo windows. Otra ventaja es que no necesariamente debe estar cargado de forma permanente, sino que lo ejecutas cuando lo vas a usar y listo.


    Antonio Garrido
    Diseño y desarrollo de Software
    Yoled Software
    http://www.yoled.com



  15. Hola, oigan una pregunta!!!

    he hecho todo como esta en el tutorial, el problema es que le baja calidad a la imagen cuando le añade la marca agua, alguien que me pueda decir donde le modifico porque no encuentro donde para ponerle la calidad de la imagen al 100% ????



  16. me parece muy interesante esto de las marcas d agua por que te la oportunidad de incrustar tu logo para hacer branding y atraer trafico a tu sitio y ademas protegerte de que cuando te chupen la imgen y lo incruste en en otro sitio tu logo y su url estaran publicitadas insitu.. xD..

    me gusta la idea lo voy probar
    y nada asi sera..



  17. amigo yo tengo en mi galeria de fotos de mi web intalado el MG2 de minigal y ya le he hecho varias modificaciones al codigo para adaptarlo a mi site web, ahora bien es posible introducir ese dodigo en el index.php en el admin.php de la galeria de fotos para que al cargar una fotografia ya le aplique automaticamente el codigo? podrias ayudarme con esto? si quieres te envio por email el codigo para que me expliques como lo introduzco, gracias.



  18. muy bueno el script, aunq deberian de haber hecho una explicacion algo mas detallada del script pero en fin.
    Respondo a la pregunta q muchos se hacen, q desean q esta imagen se guarde y no q solo se muestre, en ese caso el imagejpeg($im2); se convertiria en imagejpeg($im2,"nuevafoto.jpg");
    claro q lo guarda pero ahora hay q ver las cabeceras y todo eso, espero haber podido ayudar



  19. y para cambiar la posicion de la marca de awa??



  20. Para modificar la posicion de la marca de agua lo que hay que hacer es cambiar los valores en la siguiente linea:
    imagecopy($im2, $im, (imagesx($im2)/2)-(imagesx($im)/2), (imagesy($im2)/2)-(imagesy($im)/2), 0, 0, imagesx($im), imagesy($im));

    por ejemplo si se divide por 20 en lugar de 2 la imagen sube para arriba, tambien se puede cambiar los menos por mas, lo que hay que dejar como esta es donde dice 0,0

agregar comentario


Se permiten las etiquetas HTML , y

. Si ingresa alguna direcci?n web o direcci?n de email ser?n convertidos en enlaces autom?ticamente.





publicidad

API DE FACEBOOK
GOOGLE CALENDAR API
GOOGLE MAPS API