Php 在图像下载时自动添加水印

Php 在图像下载时自动添加水印,php,javascript,image-manipulation,watermark,Php,Javascript,Image Manipulation,Watermark,当有人从您的网站下载图像时,是否可以添加水印?如果是,最好的方法是什么 提前谢谢。如果您的意思是当右键单击->保存它时,恐怕这是不可能的。 如果你通常是说你有一个专用的下载按钮或链接,你可以让它通过一个PHP文件重定向请求,该文件将添加所需的水印,并生成一个新的图像文件供下载。请在本网站中检查以下相同的url,这将对你有很大帮助 以下是从上面的链接 <?php function watermarkImage ($SourceFile, $WaterMarkText, $Destinat

当有人从您的网站下载图像时,是否可以添加水印?如果是,最好的方法是什么


提前谢谢。

如果您的意思是当
右键单击->保存它时,恐怕这是不可能的。

如果你通常是说你有一个专用的下载按钮或链接,你可以让它通过一个PHP文件重定向请求,该文件将添加所需的水印,并生成一个新的图像文件供下载。

请在本网站中检查以下相同的url,这将对你有很大帮助

以下是从上面的链接

 <?php
function watermarkImage ($SourceFile, $WaterMarkText, $DestinationFile) { 
   list($width, $height) = getimagesize($SourceFile);
   $image_p = imagecreatetruecolor($width, $height);
   $image = imagecreatefromjpeg($SourceFile);
   imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width, $height); 
   $black = imagecolorallocate($image_p, 0, 0, 0);
   $font = 'arial.ttf';
   $font_size = 10; 
   imagettftext($image_p, $font_size, 0, 10, 20, $black, $font, $WaterMarkText);
   if ($DestinationFile<>'') {
      imagejpeg ($image_p, $DestinationFile, 100); 
   } else {
      header('Content-Type: image/jpeg');
      imagejpeg($image_p, null, 100);
   };
   imagedestroy($image); 
   imagedestroy($image_p); 
};
?>
<?php
$SourceFile = 'image1.jpg';//image path
$DestinationFile = 'images/image1-watermark.jpg'; //Out put path
$WaterMarkText = 'Copyright Watermark text';
watermarkImage ($SourceFile, $WaterMarkText, $DestinationFile);
?>

我建议在php中使用函数
imagecopymerge()
来添加广告水印,但如上所述:应该在将它们加载到浏览器之前添加它们。当用户下载它们(右键单击)时,它们已经被提供给浏览器(通常在缓存中)

当然,您可以动态地为所有图像提供服务,并在图像加载时检查
http\u referer
。如果缺少或不是预期的(文件未从网页加载),则添加一个水印,但这不是万无一失的

我有个更好的主意。 因为你说过当人们右键单击并选择“另存为”时,你想保护物品。因此,我们可以使用9gag的方式

创建具有固定页脚大小的图像。使用底边距页脚大小的负边距父级。给定
溢出:隐藏
这样用户就看不到隐藏在视图中的水印。现在,当用户右键单击并另存为图像时,他们将获得水印。总之,没有一个地方的图像没有水印。因此,在上传图像时,使用上述技术添加水印


或者,如果您想制作单独的水印图像,则可以检查热链接文件,然后提供水印图像

header("content-type: image/jpeg");
if (!isset($_SERVER['HTTP_REFERER'])){die("alert('Restricted Access!');");};
$_u=parse_url($_SERVER['HTTP_REFERER']);
$_u=preg_replace("/(www.)/i","",strtolower($_u['host']));
$_i=$_SERVER['HTTP_HOST'];
$_i=preg_replace("/(www.)/i","",strtolower($_i));
if ($_u != $_i){
   //handle this with gd or redirect
}

请按照中的说明在图片上添加水印。

欢迎……一切都有可能,但您需要先尝试一下。如果您有任何问题,请在此处自由提问,如果您的下载是通过php脚本进行的,那么我的答案是肯定的。如果您在某处包含了没有水印的图像,用户将始终能够在没有水印的情况下获得它。这是无法避免的。最让图像下载程序恼火的事情是将每个图像分成5x5像素的大部分或其他:0)@coldpumpkin你看到我的答案了吗?虽然这个链接可能会回答这个问题,但最好在这里包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,则仅链接的答案可能无效。