vue用js 添加水印

这篇具有很好参考价值的文章主要介绍了vue用js 添加水印。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

// 定义水印函数
const addWatermark = ({
                        container = document.body, // 水印添加到的容器,默认为 body
                        width = "300px", // 水印 canvas 的宽度
                        height = "150px", // 水印 canvas 的高度
                        textAlign = "center", // 水印文字的对齐方式
                        textBaseline = "middle", // 水印文字的基线
                        font = "16px Microsoft Yahei", // 水印文字的字体
                        fillStyle = "rgba(184, 184, 184, 0.3)", // 水印文字的填充样式
                        content = "", // 水印文字的内容
                        rotate = -30, // 水印文字的旋转角度
                        zIndex = 10000, // 水印的 z-index 值
                      }) => {
  // 生成水印 canvas
  const canvas = document.createElement("canvas");
  canvas.setAttribute("width", width);
  canvas.setAttribute("height", height);
  const ctx = canvas.getContext("2d");
  ctx.textAlign = textAlign;
  ctx.textBaseline = textBaseline;
  ctx.font = font;
  ctx.fillStyle = fillStyle;
  console.log((Math.PI / 180) * rotate,container.clientWidth)
  ctx.rotate((Math.PI / 180) * rotate);
  ctx.fillText(content, parseFloat(width) / 2, parseFloat(height) / 1);

  // 将 canvas 转换为 base64 URL
  const base64Url = canvas.toDataURL("image/png");
  console.log(base64Url);
  const __wm = document.querySelector(".__wm");
  const watermarkDiv = __wm || document.createElement("div");
  const styleStr = `
              position: absolute;
              top: 0;
              left: 0;
              bottom: 0;
              right: 0;
              width: ${container.clientWidth}px;
              height: ${container.clientHeight}px;
              z-index: ${zIndex};
              pointer-events: none;
              background: url('${base64Url}') left top repeat;
          `;
  watermarkDiv.setAttribute("style", styleStr);
  watermarkDiv.classList.add("__wm");
  // 则创建一个 div 并设置样式和类名

  if (!__wm) {
    container.style.position = "relative";
    container.insertBefore(watermarkDiv, container.firstChild);
  }
  // 监听容器变化,当容器发生变化时重新调用 addWatermark 函数
  const { MutationObserver } = window;
  if (MutationObserver) {
    let mo = new MutationObserver(function () {
      const __wm = document.querySelector(".__wm");
      // 只在__wm元素变动才重新调用__canvasWM
      if ((__wm && __wm.getAttribute("style") !== styleStr) || !__wm) {
        // 避免一直触发
        mo.disconnect();
        mo = new MutationObserver(() => {});

        addWatermark({
          container:document.body, // 水印添加到的容器,默认为 body
          width: "200px",
          height: "100px",
          textAlign: "center",
          textBaseline: "middle",
          font: "16px Microsoft Yahei",
          fillStyle: "rgba(184, 184, 184, 0.3 )",
          content,
          rotate: -30,
          zIndex: 10000,
        });
      }
    });

    mo.observe(container, {
      attributes: true,
      subtree: true,
      childList: true,
    });
  }
};

export default addWatermark;

文章来源地址https://www.toymoban.com/news/detail-834976.html

到了这里,关于vue用js 添加水印的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [JavaScript]使用opencv.js实现基于傅里叶变换的频域水印(隐水印)

    PS:查了多方资料,都没有提到用 JavaScript 来实现频域水印的教程,故经过笔者的实践,遂写一篇教程来简单介绍。 通过了解频域水印的相关知识,我理解了频域水印就是先将图片进行傅里叶变换,得到频域图,然后将水印文字加到频域图中,在将频域图转换回去得到加了频

    2024年02月09日
    浏览(65)
  • 前端vue实现页面加水印文字 单个页面所有页面加水印 水印颜色

    前端vue实现页面加水印文字, 可以实现系统所有页面加水印,也可以单个页面加水印, 可更改水印颜色,  阅读全文下载完整代码请关注微信公众号: 前端组件开发 效果图如下:       #### 使用方法 ```使用方法 /* 给系统所有页面加水印*/ // 第一个参数:水印文字  第二个参数: 加

    2024年02月08日
    浏览(50)
  • 前端vue2 全局水印效果

    最近写项目遇到一个需求,全局显示水印,不管在哪个路由都要显示。 想要实现的效果: 新建shuiyin.js文件 main.js中全局注册

    2024年02月15日
    浏览(32)
  • 【VUE】前端实现防篡改的水印

    图片加水印的操作一般是由后端来完成,有些站点保护的知识产权的类型可能比较多,不仅仅是图片,可能还有视频、文字等等,对于不同类型的对象添加水印后端操作比较复杂,所有有些站点逐步的让前端去进行水印添加的操作。 如果用 React 框架来进行开发就比较简单,

    2024年02月14日
    浏览(28)
  • Vue使用pdf-lib为文件流添加水印并预览

    之前也写过两篇预览pdf的,但是没有加水印,这是链接:Vue使用vue-pdf实现PDF文件预览,使用pdfobject预览pdf。这次项目中又要预览pdf了,要求还要加水印,做的时候又发现了一种预览pdf的方式,这种方式我觉的更好一些,并且还有个要求就是添加水印,当然水印后端也是可以加

    2024年02月02日
    浏览(50)
  • vue 纯前端预览pdf,纯前端实现pdf加水印下载文件也带水印,防止pdf下载

      原理:主要是利用pdfh5这个插件来完成的   使用方法:   1.页面需要有一个容器例子:div id=\\\"demo\\\"/div   2.下载pdfh5插件 npm install pdfh5   (注意:webpack5之后不会下载polyfill 需要手动下载 所以引入pdfh5的时候会报错)   解决方案:下载 node-polyfill-webpack-plugin npm install node-polyfill-

    2024年04月15日
    浏览(43)
  • 在JavaScript中添加css样式 js追加类

    一、原生js中添加类的方法 二、jquery中添加类的方法 三、检查是否含有某个类的方法 四、在JavaScript中添加CSS样式: 五、使用HTML DOM的setAttribute()方法更改CSS属性: 六、使用JavaScript可以通过动态创建样式表 style标签 来添加CSS样式。 例如,以下代码创建一个新的style标签,并

    2024年02月03日
    浏览(46)
  • JavaScript - 判断当前时间是否在指定区间内,例如:9:00~12:00(检查当前时间是否处于规定的两个时间段范围内),适用于 vue.js / uniapp / 微信小程序等前端项目

    例如,您想知道当前时间是否处于 9:00 ~ 12:00 时间区间内,然后根据这个判断进而实现业务逻辑。 如下示例所示, 本文提供一个函数,您只需要传入 2 个时间区间,便可得出当前时间是否在该时间区间范围内: 您可以一键复制,直接粘贴到您的项目中。 您只需要传入开始时

    2024年02月16日
    浏览(50)
  • 前端vue基于html2canva jspdf 实现前端页面加水印 并导出页面PDF

    随着技术的发展,开发的复杂度也越来越高,传统开发方式将一个系统做成了整块应用,经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改,造成牵一发而动全身。通过组件化开发,可以有效实现单独开发,单独维护,而且他们之间可以随

    2024年02月03日
    浏览(33)
  • jQuery.js - 前端必备的Javascript库

    作者: WangMin 格言: 努力做好自己喜欢的每一件事 jQuery.js 是什么? jQuery是一个快速简洁、免费开源易用的JavaScript框架, 倡导写更少的代码,做更多的事情 。它封装JavaScript常用的功能代码,提供了一种简便的JavaScript设计模式,以及我们开发中常用到的操作DOM的API,优化HTML文

    2024年02月05日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包