2012-01-28 7 views
4

Je veux savoir s'il est possible de protéger les images de mon hôte chargées de l'extérieur en ajoutant un filigrane en utilisant .htaccess? C'est-à-dire si un autre site utilise mon URL d'image http://example.com/1.jpg dans une balise img sur leurs propres sites Web.Htaccess et filigrane

Le plan est le quand une demande étrangère vient à mon hôte, je lui ajoute un filigrane et l'envoie à l'utilisateur parcourant le site étranger.

+0

Je ne pense pas que ce soit possible avec htaccess. Vous devrez probablement rediriger l'utilisateur vers un script (PHP, etc.) qui a filigrané l'image. –

+0

ok je peux d othis maintenant! mais je veux détecter la demande étrangère venant à mon hôte d'un autre site web !! – bizzr3

+0

@bizzare Vérifiez le champ de référence de la requête. – Cheery

Répondre

2

Ce que vous voulez essentiellement à faire, est de commencer avec ce tutoriel:

http://www.alistapart.com/articles/hotlinking/

Cela vous montre comment rediriger des images provenant de sites externes vers une page PHP. Ensuite, vous pouvez utiliser cette page PHP pour votre image en filigrane, avec quelque chose comme ceci:

<?php 
header('content-type: image/jpeg'); 
$watermark = imagecreatefrompng('watermark.png'); 
$watermark_width = imagesx($watermark); 
$watermark_height = imagesy($watermark); 
$image = imagecreatetruecolor($watermark_width, $watermark_height); 
$image = imagecreatefromjpeg($_GET['pic']); 
$size = getimagesize($_GET['pic']); 
$dest_x = $size[0] - $watermark_width - 5; 
$dest_y = $size[1] - $watermark_height - 5; 
imagecopymerge($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, 100); 
imagejpeg($image); 
imagedestroy($image); 
imagedestroy($watermark); 
?> 
+0

merci j'essaye – bizzr3

+0

hummm je ne peux pas comprendre cette partie de htaccess' RewriteCond% {HTTP_REFERER}! \ .com [NC] 'je travaille sur localhost avec le serveur de wamp avec Windows xp – bizzr3

+1

@bizzare: C'est une condition pour cette règle de réécriture, vous devez le modifier. Cela signifie essentiellement que la requête ne provient pas de * votre * site, c'est-à-dire qu'il s'agit d'une demande étrangère. – cha0site

1

Le fichier .htaccess ne peut pas ajouter de filigranes à vos images. Cependant, cela peut restreindre l'accès à vos images.

Cependant, vous pouvez ajouter des filigranes à l'aide de PHP GD Library. Le code ci-dessous vous montre comment ajouter un filigrane à votre image via PHP GD.

<?php 
// Load the stamp and the photo to apply the watermark to 
$stamp = imagecreatefrompng('stamp.png'); 
$im = imagecreatefromjpeg('photo.jpeg'); 

// Set the margins for the stamp and get the height/width of the stamp image 
$marge_right = 10; 
$marge_bottom = 10; 
$sx = imagesx($stamp); 
$sy = imagesy($stamp); 

// Copy the stamp image onto our photo using the margin offsets and the photo 
// width to calculate positioning of the stamp. 
imagecopy($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp)); 

// Output and free memory 
header('Content-type: image/png'); 
imagepng($im); 
imagedestroy($im); 
?> 

timbre $ est le contenu que vous voulez être sur filigrane (par exemple: droits de reproduction réservés) et $ im est l'image réelle qui doit être protégée.

+0

merci les hommes! mais ce n'est pas résoudre mon problème! Je veux juste détecter le referer étranger que l'aide de mes fichiers d'image, puis le rediriger vers le fichier php GD activé comme 'watermark.php' – bizzr3

0

vous devez utiliser HTTP_REFERER pour si l'utilisateur est venu d'une durée déterminée dont le lien puis le comparer avec votre propre nom de domaine. Si le domaine de la requête était différent, utilisez php gd lib pour ajouter un filigrane sur vos images. vous devriez vérifier si HTTP_REFERER est défini ou non. par défaut si l'utilisateur ne vient pas d'une autre page sur votre site et est venu directement, il sera vide et non défini.

if(isset($_SERVER['HTTP_REFERER'])) { 
     #check if its from external domin 
     # do something here 
}