Htaccess和水印

时间:2012-01-28 08:53:03

标签: php .htaccess watermark

我想知道是否可以通过使用.htaccess添加水印来保护主机中从外部加载的图像?

也就是说,如果其他网站在自己网站的img标记中使用了我的图片网址http://example.com/1.jpg

计划是当外国请求来到我的主机时,我为其添加水印并将其发送给浏览国外网站的用户。

3 个答案:

答案 0 :(得分:2)

您基本上想要做的是从本教程开始:

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

这将向您展示如何将来自外部站点的图像重定向到PHP页面。然后,您可以使用该PHP页面为您的图像添加水印,如下所示:

<?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);
?>

答案 1 :(得分:1)

.htaccess无法为图片添加水印。但是,它可以限制对图像的访问。

但是,您可以使用PHP GD Library添加水印。以下代码显示了如何通过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);
?>

$ stamp是您想要在水印上的内容(例如:版权保留)和$ im是您必须受到保护的实际图像。

答案 2 :(得分:0)

您必须使用HTTP_REFERER来确定用户是来自哪个链接,然后将其与您自己的域进行比较。如果请求域不同,则使用php gd lib在图像上添加水印。 你应该检查是否设置了HTTP_REFERER。默认情况下,如果用户没有从另一个页面进入您的站点并直接进入,则它将为空并且未设置。

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