A partir de una entrada que aparecía esta mañana en Tu Receta, he pasado el día intentando mejorar el sistema. Ellos proponen que cuando alguien enlace directamente a una foto de tu sitio, cambiar la url mediante mod_rewrite hacía otra imagen para que en el sitio sólo pueda mostrar una imagen con algún mensaje o similar, pero no las imágenes originales. Recordé que mi amigo Migue había pasado por eso y lo resolvió, así que empece a investigar para ver cómo podría solucionarlo.
Requerimientos:
- Tener activado mod_rewrite en nuestro servidor
- PHP5-GD para trabajar con imágenes
- Una imagen que será la marca de agua
Lo primero que hacemos es añadir a nuestro .htaccess las nuevas reglas para mod_rewrite que son las básicamente las mismas que en Tu Receta pero cambiamos la RewriteRule así:
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://www.muspells.net/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.muspells.net$ [NC]
RewriteRule ^(.*)\.(gif|jpg|png)$ image_script.php?image=$1\.$2 [R]
Cambiamos la regla de reescritura para que apunte a un script de PHP donde editaremos al vuelo la imagen para devolverla al REFERER con una marca de agua.
Hemos llamado al script image_script y lo hemos colocado en la raíz de documentos,
<?php
// En WordPress por ejemplo las imagenes se guardan en directorios,
// necesitamos el PATH completo a la imagen.
$URI = $_GET['image'];
$URI_PARSER = explode ('/', $URI);
$image = "/path/to/DocumentRoot/".$URI_PARSER[count($URI_PARSER) - 1];
switch (TRUE) {
case stristr($image,'jpg'):
$photoImage = ImageCreateFromJpeg("$image");
break;
case stristr($image,'gif'):
$photoImage = ImageCreateFromGIF("$image");
break;
case stristr($image,'png'):
$photoImage = ImageCreateFromPNG("$image");
break;
}
ImageAlphaBlending($photoImage, true);
// Añadimos aquí el fichero de marca de agua.
$logoImage = ImageCreateFromPNG("watermark.png");
$logoW = ImageSX($logoImage);
$logoH = ImageSY($logoImage);
// Los 1's representan el margen con el margen superior izquierdo
ImageCopy($photoImage, $logoImage, 1, 1, 0, 0, $logoW, $logoH);
ImagePNG($photoImage); // output to browser
ImageDestroy($photoImage);
ImageDestroy($logoImage);
?>
El script colocará la imagen watermark.png en la esquina superior izquierda.
Cuando accedemos a alguna imagen de nuestro sitio de forma legítima la veremos así:
Mientras que si accedemos enlazando directamente la veremos así:
Fuentes:




Recent Comments
(24 weeks ago)
(24 weeks ago)
(25 weeks ago)
(25 weeks ago)
(25 weeks ago)
(25 weeks ago)
(25 weeks ago)
(35 weeks ago)
(35 weeks ago)
(67 weeks ago)