Cambiar de idioma Windows Vista Home Premium, Home Basic y Business probado 100%
Páginas: [1]   Ir Abajo
Imprimir
Autor Tema: Marcas de agua automáticas con PHP y GD  (Leído 162 veces)
0 Usuarios y 1 Visitante están viendo este tema.
SanTroX™
Gran Colaborador
*****

Gracias recibidos: 184
Desconectado Desconectado

Sexo: Masculino
Mensajes: 1355


Espíritu Open Source XD


Ver Perfil WWW

« en: Agosto 24, 2008, 11:54:53 »

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...

Código:
<?php

$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), 00imagesx($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), 00imagesx($im), imagesy($im));
imagecopy($im2$im, ((imagesx($im2)/2)-(imagesx($im)/2))+(imagesx($im)*$n), (imagesy($im2)/2)-(imagesy($im)/2), 00imagesx($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...



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



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.
En línea


98% de los adolescentes han fumado, si eres del dichoso 2% que no lo ha hecho, copia y pega esto en tu firma.
Páginas: [1]   Ir Arriba
Imprimir
Ir a:  

¿Como postear en Polaxia? - ¿Quieres subir una imagen al foro? - Subir archivos - F.A.Q - Registrarse