【问题标题】:Automatically adding watermark on image download图片下载自动添加水印
【发布时间】:2012-11-14 10:50:31
【问题描述】:

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

提前致谢。

【问题讨论】:

  • 欢迎......一切皆有可能,但您需要先尝试一下,如果您有任何问题,请随时在这里提问
  • 如果您通过 php 脚本下载,那么我的答案是肯定的。
  • 如果您在某处包含没有水印的图像,用户将始终能够获得没有水印的图像。没有机会避免这种情况。惹恼图像下载器的最佳方法是将每个图像分成 5x5 像素的大部分或……:0)
  • @coldpumpkin 你看到我的回答了吗?

标签: php javascript image-manipulation watermark


【解决方案1】:

如果你的意思是 Right Click -> Saveing 时,那恐怕是不可能的。
如果您通常意味着您有一个专用的下载按钮或链接,您可以让它通过一个 PHP 文件重定向请求,该文件将添加所需的水印并生成一个新的图像文件供下载。

【讨论】:

    【解决方案2】:

    我有个更好的主意。

    既然你说你想保护人们右键单击并选择另存为时的东西。所以,我们可以使用 9gag 的方式。

    创建具有固定大小的页脚的图像。使用底边距的页脚大小的负边距父级。给overflow: hidden;,这样用户就看不到水印了,水印是隐藏在视图之外的。现在,当用户右键单击并另存为图像时,他们将有水印。总而言之,图像没有没有水印的地方。因此,在上传图片时,请使用上述技术添加水印。


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

    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
    }
    

    按照this tutorial中的说明在图片上制作水印。

    【讨论】:

      【解决方案3】:

      我建议使用函数 imagecopymerge() 在 php http://www.php.net/manual/en/function.imagecopymerge.php 中添加水印,但如前所述:应在将它们加载到浏览器之前添加它们。当用户下载它们(右键单击)时,它们已经被提供给他们的浏览器(并且通常在缓存中)。

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

      【讨论】:

        【解决方案4】:

        请在本站查看以下网址,这对您有很大帮助

        http://www.phpjabbers.com/put-watermark-on-images-using-php-php20.html

        以下来自以上链接

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

        【讨论】:

        • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
        猜你喜欢
        • 1970-01-01
        • 2015-09-18
        • 2020-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多