// js文件
let WaterMark = (() => {let painter = null// 获取画笔对象function getPainter(w,h) {if(painter === null){let canvas = document.createElement('canvas')canvas.width = wcanvas.height = hpainter = canvas.getContext('2d')}return painter}/***  画印章* (x,y) 印章左上角位置*  width,height 印章的宽高*/function drawRect(canvas,x,y,width,height) {let painter = canvas.getContext('2d')// 记录初始化状态painter.save();// 移动中心点并旋转painter.translate(x + 0.5 * width, y + 0.5 * height);painter.rotate(-Math. PI / 180 * 15);painter.translate(-(x + 0.5 * width), -(y + 0.5 * height));painter.beginPath();painter.lineWidth = "3";painter.rect(x, y, width, height);painter.strokeStyle = "red";painter.stroke();painter.closePath();painter.beginPath();painter.lineWidth = "7";painter.rect(x - 10, y - 10, width + 20, height + 20);painter.strokeStyle = "red";painter.stroke();painter.closePath();painter.beginPath();painter.lineWidth = "1";painter.font = "21px Arial normal";painter.textAlign = "center";painter.strokeText("内部信息 禁止外传",x+93,y+33);painter.strokeStyle = "red";painter.closePath();// 恢复初始状态painter.restore();return canvas;}/*** 封装水印* (x,y)左上角位置*  text 水印字符*  angle 水印字符旋转角度*/function drawLongleMark(canvas,x,y,text,angle) {let painter = canvas.getContext('2d')// 记录初始化状态painter.save();painter.translate(x, y);painter.rotate(-Math. PI / 180 * angle);painter.translate(-x, -y);painter.beginPath();// 字体颜色painter.lineWidth = "1";painter.strokeStyle = "rgba(0,0,0,0.1)";// 字体painter.font = "12px 黑体";painter.textBaseline = 'middle';// 画字painter.strokeText(text,x,y);painter.closePath();// 恢复初始状态painter.restore();return canvas;}/*** 将水印文字铺满屏幕* (screenW,screenH)屏幕的宽高* (startX,startY) 第一个水印文字的位置*  intervalX 水印列与列的间隔*  intervalX 水印行与行的间隔*/function spreadMarkScreen(canvas,text,angle,screenW,screenH,startX,startY,intervalX,intervalY) {// 添加水印的位置let markX = startXlet markY = startY// 水印最右列距离距离屏幕右侧至少20while(markX < screenW - 20) {markY = startYwhile(markY <= screenH) {drawLongleMark(canvas,markX,markY,text,angle)// y轴添加高度markY+=intervalX}markX+=intervalX}return canvas}return {getPainter,drawRect,drawLongleMark,spreadMarkScreen,}
})()
export default WaterMark

基于canvas使用添加水印

js导出图片添加水印相关推荐

  1. cytoscape.js导出图片png或jpg

    cytoscape.js实现导出图片png cytoscape.js 导出样例展示 cytoscape.js `Export `方法 [详情](https://js.cytoscape.org/#co ...

  2. js 给图片添加水印

    如何在图片上添加水印? 1.把图片或者图片文件转成image元素 2.把转成的image转成canvas 3.在生成的canvas中添加水印 先看效果 1.把图片或者图片文件转成image元素 fun ...

  3. 基于watermark.js给图片添加水印

    依赖watermark.min.js文件 import watermark from "../../asset/watermark.min.js";/****fileUrl 文件地 ...

  4. vue上传图片加水印;js上传图片添加水印;vue给图片添加水印;canvas图片添加水印;canvas画布导出图片

    uni-app微信小程序图片加水印,点击看这篇 需求场景: 要求上传图片,并给图片添加水印.传给后端的也是有水印的图片. 逻辑步骤: 通过input上传图片,拿到图片的信息和base64,将图片绘制到 ...

  5. JS前端基于canvas给图片添加水印,并下载带有水印的图片

    基于canvas给图片添加水印 实现效果图 图片添加水印的步骤 1.获取图片路径,将图片转换为canvas 2.canvas画布上绘制文字水印 3.水印绘制完成后,将canvas转换为图片格式 4.水 ...

  6. JS导出PDF插件(支持中文、图片使用路径)

    JS导出PDF插件(支持中文.图片使用路径) 原文:JS导出PDF插件(支持中文.图片使用路径) 在WEB上想做一个导出PDF的功能,发现jsPDF比较多人推荐,遗憾的是不支持中文,最后找到pdfma ...

  7. 纯前端JS导出Word包含图片

    纯前端JS导出Word包含图片 纯前端JS导出Word文档包含图片 Word导出方式 依赖 实现代码 纯前端JS导出Word文档包含图片 在做项目中,遇到一个需求,是将后台返回的属性以及URL图片导出 ...

  8. html中实现添加水印的功能,JS模拟实现图片添加水印功能

    JS模拟实现图片添加水印功能 ======================================================== 今天看到网友发帖求助如果在图片上自动添加水印的功能,于是 ...

  9. JS模拟实现图片添加水印功能

    JS模拟实现图片添加水印功能 ======================================================== 今天看到网友发帖求助如果在图片上自动添加水印的功能,于是 ...

最新文章

  1. 带着问题读CLR via C#(六)常量与字段
  2. 正则表达式中(?:)的巨大作用
  3. HTML哪些是块级元素,哪些是行内元素、
  4. 生成报告配置xml_自动化测试报告太丑?Allure拯救你!
  5. 使用matlab工具研究神经网络的简单过程(网络和数据下载)
  6. mysql hy093_请问SQLSTATE [HY093]:参数号无效:未定义参数
  7. 用tensorflow框架和Mnist手写字体,训练cnn模型以及测试一张手写字体
  8. encode函数php,utf8_encode()与utf8_decode函数_PHP教程
  9. 2018-2019-1 20165208 《信息安全系统设计基础》第5周学习总结
  10. 大学生必犯的N大错误(开篇)
  11. ADO.NET DataReader对象简介
  12. CST、PVST、PVST+、rapid-PVST+、MSTP
  13. AES加密/解密算法
  14. 嵌入式系统架构设计师的理解
  15. 我眼中的程序化交易之路
  16. 反射(filed)的理解
  17. MATLAB中能对三角函数降幂嘛,初中数学三角函数降幂公式
  18. sanity测试_Sanity.io入门-您可以自定义的无头CMS
  19. 小肚皮最新版本_小肚皮下载_小肚皮安卓版5.20 - 系统城
  20. 【白皮书分享】2020脱发治疗白皮书.pdf(附下载链接)

热门文章

  1. educoder实训——地球数据计算闯关
  2. 如何熟练掌握计算流体力学 ANSYS FIuent软件
  3. 从万达体育和快手合作看后疫情时代体育赛事产业的变局
  4. 中国矿业大学CTF网络安全实训平台Writeup汇总
  5. 计算机安全和网络保密管理工作职责,某局网络安全和保密工作总结
  6. 为什么c语言没有输出
  7. div id与div class详解
  8. 蓝桥杯单片机比赛学习:1、led点亮原理
  9. A*算法详解(讲的一级棒 )
  10. 【无标题】贪心算法-MATLAB实现