当前位置: 首页 > news >正文

vue结合canvas动态生成水印效果

在 Vue 项目中添加水印可以通过以下几种方式实现:


方法一:使用 CSS

直接通过 CSS 的 background 属性实现水印:

实现步骤
  1. 在需要添加水印的容器中设置背景。
  2. 使用 rgba 设置透明度,并通过 background-repeatbackground-size 实现重复。
示例代码
<template><div class="watermark-container"><p>这是带水印的内容。</p></div>
</template><style>
.watermark-container {position: relative;width: 100%;height: 200px;background-color: #f0f0f0;background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="200" height="200"><text x="20" y="100" font-size="20" fill="rgba(0,0,0,0.2)" transform="rotate(-45)">Watermark</text></svg>');background-repeat: repeat;
}
</style>

方法二:通过 Canvas 动态生成水印

使用 Canvas 动态生成水印,并将其作为背景图应用。

实现步骤
  1. 在 Vue 中创建一个方法,通过 canvas 动态生成水印图。
  2. 将生成的图像作为背景图应用到需要添加水印的元素上。
示例代码
<template><div class="watermark-container" :style="{ backgroundImage: watermark }"><p>这是带水印的内容。</p></div>
</template><script>
export default {data() {return {watermark: '',};},mounted() {this.generateWatermark();},methods: {generateWatermark() {const canvas = document.createElement('canvas');const ctx = canvas.getContext('2d');canvas.width = 200;canvas.height = 200;ctx.font = '20px Arial';ctx.fillStyle = 'rgba(0, 0, 0, 0.2)';ctx.textAlign = 'center';ctx.textBaseline = 'middle';ctx.translate(100, 100);ctx.rotate((-45 * Math.PI) / 180);ctx.fillText('Watermark', 0, 0);this.watermark = `url(${canvas.toDataURL('image/png')})`;},},
};
</script><style>
.watermark-container {position: relative;width: 100%;height: 200px;background-repeat: repeat;
}
</style>

方法三:封装水印组件

如果需要复用,可以封装一个通用的水印组件。

示例代码
<template><div class="watermark" :style="{ backgroundImage: watermark }"><slot></slot></div>
</template><script>
export default {props: {text: {type: String,default: 'Watermark',},fontSize: {type: String,default: '20px',},color: {type: String,default: 'rgba(0, 0, 0, 0.2)',},rotate: {type: Number,default: -45,},},data() {return {watermark: '',};},mounted() {this.generateWatermark();},methods: {generateWatermark() {const canvas = document.createElement('canvas');const ctx = canvas.getContext('2d');canvas.width = 200;canvas.height = 200;ctx.font = `${this.fontSize} Arial`;ctx.fillStyle = this.color;ctx.textAlign = 'center';ctx.textBaseline = 'middle';ctx.translate(100, 100);ctx.rotate((this.rotate * Math.PI) / 180);ctx.fillText(this.text, 0, 0);this.watermark = `url(${canvas.toDataURL('image/png')})`;},},
};
</script><style>
.watermark {position: relative;width: 100%;height: 100%;background-repeat: repeat;
}
</style>

使用:

<template><div><Watermark text="Confidential" color="rgba(255,0,0,0.1)"><p>这是机密内容。</p></Watermark></div>
</template><script>
import Watermark from './Watermark.vue';export default {components: {Watermark,},
};
</script>

在这里插入图片描述

以上方法可以根据需求选择适合的方式实现水印效果。

http://www.lryc.cn/news/496917.html

相关文章:

  • Qt 5 中的 QTextStream 使用指南
  • 中安证件OCR识别技术助力鸿蒙生态:智能化证件识别新体验
  • SpringBoot 框架下基于 MVC 的高校办公室行政事务管理系统:设计开发全解析
  • 【ArkTS】使用AVRecorder录制音频 --内附录音机开发详细代码
  • Selenium3+Python如何操作键盘
  • PLC协议
  • C_字符串的一些函数
  • 使用Native AOT发布C# dll 提供给C++调用
  • Git 提交代码日志信息
  • Request method ‘POST‘ not supported(500)
  • 终端环境下关闭显示器
  • 常见排序算法总结 (三) - 归并排序与归并分治
  • 【后端开发】Go语言编程实践,Goroutines和Channels,基于共享变量的并发,反射与底层编程
  • PyTorch 2.5.1: Bugs修复版发布
  • 【Android】组件化嘻嘻嘻gradle耶耶耶
  • vulnhub靶场【哈利波特】三部曲之Aragog
  • HarmonyOS开发中,如何高效定位并分析内存泄露相关问题
  • java调用ai模型:使用国产通义千问完成基于知识库的问答
  • 2023年第十四届蓝桥杯Scratch国赛真题—推箱子
  • 银河麒麟V10-SP1设置redis开机自启
  • 释放超凡性能,打造鸿蒙原生游戏卓越体验
  • Node.js 实战: 爬取百度新闻并序列化 - 完整教程
  • 106.【C语言】数据结构之二叉树的三种递归遍历方式
  • qt QToolButton详解
  • 2024年大热,Access平替升级方案,也适合Excel用户
  • 探索Scala的模式匹配:身份证识别与等级判定!!! #Scala # scala #匹配模式
  • python数据分析之爬虫基础:爬虫介绍以及urllib详解
  • 【星海随笔】syslinux
  • 力扣C语言刷题记录 (二)移除元素
  • 【Vue3】【Naive UI】<NAutoComplete>标签