【问题标题】:Adding Logo or Watermark on Save [closed]在保存时添加徽标或水印 [关闭]
【发布时间】:2017-03-04 06:16:38
【问题描述】:

当您在网站上展示图片时,水印或实现的徽标很烦人,但我也担心未经许可使用图片。

你们中的许多人可能知道 9gag 在 2016 年之前一直在使用它,当您从网站保存图片时,它会在保存的图片中添加 9gag 徽标。

老实说,我想不出任何方法来实现它。

我正在使用我的自定义 ASP.Net MVC 5 CMS,但任何前端解决方案都将受到高度赞赏。

编辑

根据 W3,我们可以通过 JavaScript 在画布中重新创建图像:

window.onload = function() {
    var c=document.getElementById("myCanvas");
    var ctx=c.getContext("2d");
    var img=document.getElementById("scream");
    ctx.drawImage(img,10,10);
};

由于我正在重绘图像,我认为理论上应该有一种方法可以合并两个图像。有没有办法截取进程并添加logo或水印?

【问题讨论】:

  • 你是说你想在你的页面中显示图像没有水印,但是如果用户试图保存图像,你会以某种方式添加水印?我认为这是不可能的。
  • 前端解决方案将涉及 canvas - 您所描述的内容听起来可能,但很容易被规避,这可能就是您所说的 9gag 这样做的原因那
  • 如果您尝试使用 canvas 元素添加水印,这意味着您仍然需要将原始图像下载到浏览器,这意味着用户可以找出 URL 并直接下载。或者将其从浏览器缓存中复制出来。或者禁用你的 JS。等等。
  • @nnnnnn 是的,我知道这是不可能的,除非图像文件本身带有物理水印(这就是股票照片网站这样做的原因)但我们每天都在谈论 John Doe,可能对 DOM 和控制台一无所知等等。也可以用 javascript 合并两个图像对其他应用程序很有用。

标签: javascript jquery html css asp.net-mvc


【解决方案1】:

短版:不要认为没有破解是可能的。如果您想在右下角添加水印,请复制每张图像底部的几个像素,将水印放在整张图像上,然后将原始角悬停在其上。

长版: 您无法拦截浏览器的“右键单击->将图像另存为”功能。您可以做的是一种 hack,其中底层图像具有水印,但您用图像的旧副本覆盖水印。如果您想将您的网站名称放在图片的右下角,请复制该图片的一小部分,然后将水印放在那里。现在,在您的应用程序中,将两个图像包装在一个具有相对定位的 div 中。将 div 设置为原始图像的大小,绝对定位和 top/left: 0px,然后将角放在顶部并执行 bottom/right: 0px。然后,如果他们右键单击除右下角以外的任何位置并保存,他们会得到下面的图像,其中有水印。

【讨论】:

  • 聪明,但是一个简单的截图就可以解决这个问题,不是吗?
  • @nnnnnn 截图总是一个解决方案,但分辨率会很差,所以......
  • @Dustin Kane 实际上我也很关心这一点,但这意味着两次提供同一张照片(不同但不同),我认为这不是一个好主意。不过还是谢谢。
  • 实际上不是整个图像两次,因为您只需要提供图像的底角(只有几个像素,因此非常小)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 2013-04-14
  • 2018-12-20
  • 1970-01-01
  • 2011-01-15
  • 1970-01-01
  • 2016-03-25
相关资源
最近更新 更多