前端盲水印_前端代码review

前端盲水印_前端代码review需求给图片加上看不到的水印,当通过其他的方式可以清楚的看到图片中暗藏的水印,以此方式追溯到泄密的人解决办法利用canvas实现图片和水印的绘制,具体过程如下:新建canvas,宽度和高度取要加水印的图片的宽度和高度 在该canvas上绘制要添加的水印文字,文字透明度设置要特别的低,但是当水印透明度小于等于0.003,不可恢复到水印。所以我们设置透明度要不得低于0.003 将该canvas转成img(为什么canvas要转成img?之前遇到canvas在移动端无法长按出现保存、转发等操作)

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

需求

给图片加上看不到的水印,当通过其他的方式可以清楚的看到图片中暗藏的水印,以此方式追溯到泄密的人

解决办法

利用canvas实现图片和水印的绘制,具体过程如下:

  1. 新建canvas,宽度和高度取要加水印的图片的宽度和高度
  2. 在该canvas上绘制要添加的水印文字,文字透明度设置要特别的低,但是当水印透明度小于等于0.003,不可恢复到水印。所以我们设置透明度要不得低于0.003
  3. 将该canvas转成img(为什么canvas要转成img?之前遇到canvas在移动端无法长按出现保存、转发等操作)

代码如下

// imgStr为img的dom字符串
handleImgWatermark(imgStr){
  // 获取img的src的正则
  let srcReg = /src=[\'\"]?([^\'\"]*)[\'\"]?/i
  let matched = imgStr.match(srcReg)
  // 生成canvas src是必须的,如果没有src则不处理,仍返回之间的img字符串
  if(matched && matched.length > 1){
    // 获取该img的src
    let curSrc = matched[1]
    // 如果是.gif的图片则不加水印
    if(curSrc.indexOf('.gif') > -1){
      return
    }
    let that = this
    // 计算该图片展示的宽高(这里主要是为了当图片的宽度大于设备的宽度时将图片的宽度设置为设备的宽度;如果图片的宽度没有大于设备的宽度则按图片原先的宽度展示)
    let handleObj = that.handleImgWidthAndHeight(imgStr)
    let imgWidth = handleObj.width
    let imgHeight = handleObj.height
    let image = new Image()
    image.src = curSrc
    image.setAttribute("crossOrigin",'Anonymous')
    image.onload = function(){
      // 创建canvas对象
      let cvs = document.createElement("canvas");
      // 获取canvas对象的画笔工具
      let ctx = cvs.getContext('2d');
      // 设置canvas的宽和高
      cvs.width = imgWidth || image.width
      cvs.height = imgHeight || image.height
      // 将图片绘制到画布上
      ctx.drawImage(image, 0, 0, imgWidth, imgHeight);
      // 绘制的文字
      let filltext = that.userInfo ? (that.userInfo.fullName + that.userInfo.name) : '猿辅导水印'
      // 绘制的起点
      let x = 20,y=20;
      // 在canvas图片上面绘制文字,文字所占的宽高为100*30,所以在图片上每100*30的区域都应该有一个水印
      while(x<imgWidth && y<imgHeight){
        ctx.font = "12px serif";
        ctx.fillStyle = 'rgba(0,0,0,0.01)'
        ctx.fillText(filltext,x,y)
        // 计算画水印的起始坐标
        x = (x+100) >= imgWidth ? 20 : (x+100)
        y = x === 20 ? (y+30) : y
      }
      // 将处理好后的canvas转成image
      let src = cvs.toDataURL('image/png')
      // 将原先的htm文本中该img字符串替换,之后可以渲染新的文本内容
      that.handledContent = that.handledContent.replace(imgStr,`<img src="${src}"/>`)
    }
  }
},

Jetbrains全家桶1年46,售后保障稳定

效果

加了水印的图肉眼看上去是这个样子的

前端盲水印_前端代码review

在ps中经过图像的处理我们可以得到下图

前端盲水印_前端代码review

 

可以看到隐藏的水印文字,由于我没有学过专业的图像处理技术,只能简单的看懂文字,并没有很清晰,具体如何很清晰的在不同的图像下看到暗藏的水印我觉得设计部的同事应该会很清楚

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/226844.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 百度地图的开发版sha1和发布版sha1的获取方式「建议收藏」

    百度地图的开发版sha1和发布版sha1的获取方式「建议收藏」百度地图SDK在实际开发中也算是最常用的SDK之一,但是不少新手开发者对申请密钥时,填写SHA1有不少疑问,在此解答进入百度地图SDK申请密钥会看到这样的场景这里不得不说几件事在安卓开发中,打包生成APK时,我们通常有两种方式重点:也就是所谓的debug版本和release版本,这两个签名方式是不一样的。调试(

    2022年8月10日
    7
  • springapplication注解_java导入外部jar包

    springapplication注解_java导入外部jar包SpringApplication定义:Spring应用引导类,提供便利的自定义行为方法场景:嵌入式Web应用和非Web应用准备阶段配置:SpringBean来源 Java配置Class:Spring注解驱动中Java配置类,大多是情况下是Spring模式注解锁标注的类,如被@configuration标注的类 XML上下文配置文件:用于Spring传统配置驱动中的xml文件 BeanDefinitionLoader(BeanDefinitionRegistryregistr

    2025年10月17日
    7
  • UE4 GamePlay架构学习篇[通俗易懂]

    UE4 GamePlay架构学习篇[通俗易懂]附带上激活成功教程版安装说明:1.安装jdk。百度搜索jdk,如果安装了则跳过。2.解压下载的.zip文件。双击打开。syntevo_keygen.jar文件。

    2022年10月4日
    4
  • java中short、int、long、float、double取值范围「建议收藏」

    java中short、int、long、float、double取值范围「建议收藏」对于java的数据类型,既熟悉又陌生,于是整理了这篇文档。最近的面试让我开始注意细节,细节真的很重要。一、分析基本数据类型的特点,最大值和最小值。1、基本类型:int二进制位数:32包装类:java.lang.Integer最小值:Integer.MIN_VALUE=-2147483648(-2的31次方)最大值:Integer.MAX_VALUE=2147

    2022年5月22日
    52
  • WebGPU 初探 – Windows10上Chorme运行WebGPU程序

    WebGPU 初探 – Windows10上Chorme运行WebGPU程序WebGPU 是最新的 Web3D 图形 API 浏览器封装了现代图形 API Dx12 Vulkan Metal 这才是未来的标准 不像 WebGL2 0 苹果直接不支持 好 开始今天的分享 点击链接查看是否支持 WebGPU 首先分享链接 W3CWebGPU 组织 WebGPU 目前的进展可以查看 WebGPU 最新的进展和平台支持情况 WebGPU 文档 WebGPU 的官方介绍 说明比较详细 Web

    2025年7月2日
    4
  • 【HTML响应式项目】成人教育官网前端页面(HTML+CSS+JS实现三端适应)

    【HTML响应式项目】成人教育官网前端页面(HTML+CSS+JS实现三端适应)项目源码已上传至码云仓库:云南农业职业技术学院/HTML响应式成人教育官网前端页面(HTML+CSS+JS实现)项目演示地址:成人教育网AAP端下载地址:成人教育网APP端.apk-互联网文档类资源-CSDN下载目录项目源码已上传至码云仓库:https://gitee.com/ynavc/sss项目演示地址:http://ynavc.gitee.io/sss一、电脑端效果图1、首页2、所有课程3、新闻资讯4、教师团队5、关于我们二、手机端效果图.

    2022年7月20日
    17

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号