简体   繁体   中英

Htaccess and watermark

I want to know if it is possible to protect images in my host that are loaded from outside by adding a watermark using .htaccess ?

That is, if another site uses my image URL http://example.com/1.jpg in a img tag in their own websites.

The plan is the when a foreign request comes to my host, I add a watermark to it and send it to the user browsing the foreign site.

What you basically want to do, is start with this tutorial:

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

This shows you how to redirect images that come from external sites to a PHP page. Then, you can use that PHP page to watermark your image, with something like this:

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

The .htaccess cannot add watermarks to your images. However, it can restrict access to your images.

However, you can add watermarks using PHP GD Library . The below code shows you how to add a watermark to your image through 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 is the content what you want to be on watermark (eg: Copyrights Reserved) and $im is your actual image which has to be protected.

you must use HTTP_REFERER to determinate if user came from which link and then compare it with your own domain. if request domain was different then use php gd lib to add watermark on your images. you should check if HTTP_REFERER is set or not. by default if user not came from another page to your site and came directly it will be empty and not set.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM