js 常规打水印方法 canvas方法

前端添加水印效果攻略【vue和原生js添加方式】 前端全局添加水印的方式【vue和js添加方式】一🎨 阅读详情

看到同事曾经有写过一个打水印的方法就看了下实现方法。 js实现

<html> 
 <head> 
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
 <title>Web page from child.com</title> 

 </head> 
 <body> 

 </body> 
 </html>
 <script type="text/JavaScript"> 
    function watermark(settings) {
        debugger;
        //默认设置
        var defaultSettings={
            watermark_txt:"text",
            watermark_x:20,//水印起始位置x轴坐标
            watermark_y:20,//水印起始位置Y轴坐标
            watermark_rows:20,//水印行数
            watermark_cols:20,//水印列数
            watermark_x_space:100,//水印x轴间隔
            watermark_y_space:50,//水印y轴间隔
            watermark_color:'#aaa',//水印字体颜色
            watermark_alpha:0.4,//水印透明度
            watermark_fontsize:'15px',//水印字体大小
            watermark_font:'微软雅黑',//水印字体
            watermark_width:210,//水印宽度
            watermark_height:80,//水印长度
            watermark_angle:15//水印倾斜度数
        };
        //采用配置项替换默认值,作用类似jquery.extend
        if(arguments.length===1&&typeof arguments[0] ==="object" )
        {
            var src=arguments[0]||{};
            for(key in src)
            {
                if(src[key]&&defaultSettings[key]&&src[key]===defaultSettings[key])
                    continue;
                else if(src[key])
                    defaultSettings[key]=src[key];
            }
        }

        var oTemp = document.createDocumentFragment();

        //获取页面最大宽度
        var page_width = Math.max(document.body.scrollWidth,document.body.clientWidth);
        var cutWidth = page_width*0.0150;
        var page_width=page_width-cutWidth;
        //获取页面最大高度
        var page_height = Math.max(document.body.scrollHeight,document.body.clientHeight)+450;
        // var page_height = document.body.scrollHeight+document.body.scrollTop;
        //如果将水印列数设置为0,或水印列数设置过大,超过页面最大宽度,则重新计算水印列数和水印x轴间隔
        if (defaultSettings.watermark_cols == 0 || (parseInt(defaultSettings.watermark_x + defaultSettings.watermark_width *defaultSettings.watermark_cols + defaultSettings.watermark_x_space * (defaultSettings.watermark_cols - 1)) > page_width)) {
            defaultSettings.watermark_cols = parseInt((page_width-defaultSettings.watermark_x+defaultSettings.watermark_x_space) / (defaultSettings.watermark_width + defaultSettings.watermark_x_space));
            defaultSettings.watermark_x_space = parseInt((page_width - defaultSettings.watermark_x - defaultSettings.watermark_width * defaultSettings.watermark_cols) / (defaultSettings.watermark_cols - 1));
        }
        //如果将水印行数设置为0,或水印行数设置过大,超过页面最大长度,则重新计算水印行数和水印y轴间隔
        if (defaultSettings.watermark_rows == 0 || (parseInt(defaultSettings.watermark_y + defaultSettings.watermark_height * defaultSettings.watermark_rows + defaultSettings.watermark_y_space * (defaultSettings.watermark_rows - 1)) > page_height)) {
            defaultSettings.watermark_rows = parseInt((defaultSettings.watermark_y_space + page_height - defaultSettings.watermark_y) / (defaultSettings.watermark_height + defaultSettings.watermark_y_space));
            defaultSettings.watermark_y_space = parseInt(((page_height - defaultSettings.watermark_y) - defaultSettings.watermark_height * defaultSettings.watermark_rows) / (defaultSettings.watermark_rows - 1));
        }
        var x;
        var y;
        for (var i = 0; i < defaultSettings.watermark_rows; i++) {
            y = defaultSettings.watermark_y + (defaultSettings.watermark_y_space + defaultSettings.watermark_height) * i;
            for (var j = 0; j < defaultSettings.watermark_cols; j++) {
                x = defaultSettings.watermark_x + (defaultSettings.watermark_width + defaultSettings.watermark_x_space) * j;

                var mask_div = document.createElement('div');
                mask_div.id = 'mask_div' + i + j;
                mask_div.className = 'mask_div';
                mask_div.appendChild(document.createTextNode(defaultSettings.watermark_txt));
                //设置水印div倾斜显示
                mask_div.style.webkitTransform = "rotate(-" + defaultSettings.watermark_angle + "deg)";
                mask_div.style.MozTransform = "rotate(-" + defaultSettings.watermark_angle + "deg)";
                mask_div.style.msTransform = "rotate(-" + defaultSettings.watermark_angle + "deg)";
                mask_div.style.OTransform = "rotate(-" + defaultSettings.watermark_angle + "deg)";
                mask_div.style.transform = "rotate(-" + defaultSettings.watermark_angle + "deg)";
                mask_div.style.visibility = "";
                mask_div.style.position = "absolute";
                mask_div.style.left = x + 'px';
                mask_div.style.top = y + 'px';
                mask_div.style.overflow = "hidden";
                mask_div.style.zIndex = "9999";
                mask_div.style.pointerEvents='none';//pointer-events:none  让水印不遮挡页面的点击事件
                //mask_div.style.border="solid #eee 1px";
                mask_div.style.opacity = defaultSettings.watermark_alpha;
                mask_div.style.fontSize = defaultSettings.watermark_fontsize;
                mask_div.style.fontFamily = defaultSettings.watermark_font;
                mask_div.style.color = defaultSettings.watermark_color;
                mask_div.style.textAlign = "center";
                mask_div.style.width = defaultSettings.watermark_width + 'px';
                mask_div.style.height = defaultSettings.watermark_height + 'px';
                mask_div.style.display = "block";
                oTemp.appendChild(mask_div);
            };
        };
        document.body.appendChild(oTemp);
    }
    watermark();
 </script> 

在这里插入图片描述
canvas实现

<html> 
 <head> 
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
 <title>Web page from child.com</title>  
 </head> 
 <body> 
    <div class="content">
        我是内容我是内容我是内容我是内容我是内容我是内容
        我是内容我是内容我是内容我是内容我是内容我是内容
        我是内容我是内容我是内容我是内容我是内容我是内容
        我是内容我是内容我是内容我是内容我是内容我是内容
        我是内容我是内容我是内容我是内容我是内容我是内容
        我是内容我是内容我是内容我是内容我是内容我是内容
        我是内容我是内容我是内容我是内容我是内容我是内容
        我是内容我是内容我是内容我是内容我是内容我是内容
        我是内容我是内容我是内容我是内容我是内容我是内容
        我是内容我是内容我是内容我是内容我是内容我是内容
        我是内容我是内容我是内容我是内容我是内容我是内容
        我是内容我是内容我是内容我是内容我是内容我是内容
    </div>
 </body> 
 </html>

 <script type="text/JavaScript"> 
    function addWaterMarker(str){
             var can = document.createElement('canvas');
             var body = document.body;
             body.appendChild(can);
             can.width=400; //画布的宽
             can.height=200;//画布的高度
             can.style.display='none';
             var cans = can.getContext('2d');
             cans.rotate(-20*Math.PI/180); //画布里面文字的旋转角度
             cans.font = "16px Microsoft JhengHei"; //画布里面文字的字体
             cans.fillStyle = "rgba(17, 17, 17, 0.50)";//画布里面文字的颜色
             cans.textAlign = 'left'; //画布里面文字的水平位置
             cans.textBaseline = 'Middle'; //画布里面文字的垂直位置
             cans.fillText(str,can.width/3,can.height/2); //画布里面文字的间距比例
             body.style.backgroundImage="url("+can.toDataURL("image/png")+")"; //把画布插入到body中
     }
     //调用这个方法即可
     addWaterMarker("水印");
  </script>

在这里插入图片描述

神奇的canvas——巧用 canvas 为图片添加水印 代码地址如下:http://www.demodashi.com/demo/11637.html 很久之前写过一篇关于 canvas 的文章,是通过 canvas 来实现一个绚丽的动画效果,不管看过没看过的小伙伴都可以直接猛戳下面的链接直达这篇文章哦!因为之前很多篇都是偏向理论的,所以这次决定上点实际的内容——通过 canvas 为图片添加自定义水印,并且在文章末尾也会附上源码。下面进入正文~~~添加 阅读详情

相关推荐

利用Canvas添加水印

        由于工作加学习原因,很久没能来博客跟大家分享一下自己的一些技术栈了。今天也是抽空给大家做个简单的分享。        水印在我们的正常工作中还是比较常见的一种神操作,尤其像一些带有公司私有专利的时候就需要为其添加公司特有的标志。本人也是很久没有接触玩canvas了,但有个前端大牛的朋友跟我讨论如何在PDF添加水印。经本人回想,查阅文档。简单实现了利用canvas添加水印的方法。下面...

黑山老妖的博客 4900

canvas实现水印效果

canvas两种实现水印效果

老白干的zone 4213

go.js去水印解决方案实战:无痕消除水印,提升网页视觉体验

自编码器是一种无监督学习模型,通常由编码器(Encoder)和解码器(Decoder)两部分组成。其基本思想是将输入图像压缩为低维潜在表示(latent representation),再通过反向重构恢复原始图像。训练过程中,模型学习的是数据的本质分布而非简单复制,因此当输入包含噪声或遮挡时,理想状态下它能输出“干净”的版本。在去水印任务中,可以构建一个卷积自编码器(Convolutional Autoencoder, CAE),专门用于学习 go.js 图表的正常布局模式。

weixin_36001279的博客 1501

canvas实现水印

canvas实现水印

qq_58355643的博客 1035

机器学习西瓜书期末复习(2022HENU)

期末复习之机器学习 文章目录期末复习之机器学习第一章 绪论 第一章 绪论 机器学习的定义 机器学习致力于研究如何通过计算的手段,利用经验来改善系统自身的性能。 根据训练数据是否拥有标记信息,将学习任务分为监督学习和无监督学习。 监督学习 :分类和回归 线性回归、对数几率回归、决策树、支持向量机、贝叶斯分类器、神经网络 无监督学习:聚类 聚类算法: 原型聚类:(k均值,学习向量量化,高斯混合聚类);密度聚类(DBSVAN);层次聚类(AGNES)。降维。话题分析。图分

qq_46561559的博客 2万+

SigmaStar(星宸科技)SSC33X系列

目前,SSC33X系列已经量产了接近两年,SDK成熟稳定,功耗表现良好,图像效果出色,广泛应用在AI枪机、AI球机、AI云台机、多目摄像机、停车场闸机、人脸门禁、人脸锁、门铃猫眼等产品上。

Comake Online的博客 1万+

基于Canvas动态生成页面水印

在传统开发过程中难免有动态给页面渲染水印的需求,本文将提供一个基于Canvas的水印解决方案。

漫漫漫漫的博客 1053

`全网最细!! 入门必看Git教程链接:https://gitee.com/all-about-git`

全网 Git 入门教程 gitee.com。如果显示The requested URL returned error: 403错误,那就表示没有和window本地建立token令牌

qq_37855368的博客 3749

使用canvas生成水印watermark,有详细注释,简单易懂

大家好,我是小梅,公众号:「小梅的前端之路」 原创作者。 作为在前端领域不断探索的一员,在此记录开发中遇到的问题,如果你也遇到了相同的问题,希望本文对你有帮助。 生成水印的js文件: // const watermark = {} // 定义设置水印的方法, const watermarkFun = () => { // 如果水印元素已经存在就先移走,重新生成, id要是全局独一无二的 const id = '3.14159261111' if (document.getEle..

weixin_44370837的博客 6752

局部,全局(外部),static等变量详解

首先,必须明白一个程序是包含若干个源文件,每个源文件又是包含若干个函数,每个源文件、函数中又定义了若干个变量。但是每个变量都有自己的作用范围,也就是自己的作用域。只有在作用域内才可以访问变量。 变量的有效范围称为变量的作用域( scope)。归纳起来,变量有4种不同的作用域:文件作用域( file scope)、函数作用域( function scope)、块作用域(block sc...

归根结底不优秀的博客 1325

思必驰离线语音芯片:智能家居控制的核心引擎

思必驰离线语音芯片TH1520通过本地化语音识别技术,为智能家居带来革命性体验。该芯片具备200-600毫秒的快速响应、75分贝抗噪能力和双核异构设计,显著提升设备交互效率。支持自定义指令和10种音色选择,开发周期缩短至3天,BOM成本降低30%,是智能家居控制的核心引擎。

redis7keeper的博客 988

前端基于DOM或者Canvas实现页面水印

我们会看到很多页面带有水印,但是怎么实现呢?当然可以有多种实现方式,本文主要讲解在vue项目中基于DOM或者Cavans实现水印效果,当然还有其他的实现方式,比如在原图片的基础上加上水印生成新的图片,但是这需要后端处理。因为要在vue项目中使用,所以我使用自定义指令可以直接对挂载的dom实现水印效果。

编码世界 7万+

BUCK降压斩波电路设计实战:从IGBT选型到续流二极管优化

本文详细解析了BUCK降压斩波电路的设计实战,从IGBT选型到续流二极管优化,涵盖了关键参数设计、调试技巧及电磁兼容问题解决方案。通过实际案例和数据对比,帮助工程师高效完成DC-DC转换电路设计,提升系统性能和可靠性。

weixin_29253711的博客 95

JS VUE 用 canvas 给图片加水印

最近写需求,遇到要给图片加水印的需求。刚开始想的方案是给图片上覆盖一层水印照片,但是这样的话用户直接下载图片水印也会消失。后来查资料发现用 canvas 就可以给图片加水印,下面是处理过程。首先我们要确认图片的格式,我们通过 input 上传的图片格式一般是 File (File 对象是特殊类型的 Blob)即 Blob 格式。

alokka的博客 2566

从零开始学Agent的搭建——多角色项目需求分析框架实战

场景一:电商促销需求——技术细节顾此失彼团队用单Agent分析一个"双11秒杀系统"的需求。Agent输出了完整的功能清单,但当我们拿着这份方案找架构师评审时,发现了致命问题:Agent完全没有考虑库存扣减的并发一致性、Redis与MySQL之间的数据同步延迟、以及超卖风险的控制策略。原因是单Agent在处理"业务理解"任务时,已经耗尽了它的"注意力预算",技术深度分析几乎为空。场景二:ERP集成需求——跨系统边界模糊。

软件行业技术文化交流。 536

一篇把 Transport 做到可复制的实战指南:从 CTS 底层表到 LSMW、Variant、Layout、TABU、Query、SAPscript 全对象搬运

本文深入解析SAP系统中的Transport机制,将其视为可审计、可追溯的变更流水线。文章从CTS/Transport Organizer通用方法论和具体对象搬运手法两个层面展开,详细介绍了LSMW项目、程序Variant、屏幕/ALV Layout、表数据、ABAP Query、SAPscript和SO10标准文本等对象的传输策略。通过真实案例说明,代码对象往往能被正确传输,但"运行体验"和"业务配置"却常被遗漏,导致QAS测试正常而PRD环境异常。文章提供了一套可

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 178

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

前端原生基于canvas给图片添加水印,并下载带有水印的图片

qq_37831545的博客 3347

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

前端水印利器watermark-js-plus:Canvas水印的完整使用指南

在当今数字化时代,图片版权保护和文档防复制已成为前端开发的重要需求。`watermark-js-plus`作为一款基于Canvas的浏览器水印库,为开发者提供了简单而强大的前端水印解决方案。 ## 🎯 为什么选择watermark-js-plus? 这款Canvas水印工具拥有三大核心优势: **🚀 极简集成** - 只需几行代码即可为项目添加专业级水印功能,完美支持Vue 2、Vue

gitblog_00513的博客 1173

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

canvas实现水印功能

canvas实现水印功能

太阳与星辰的博客 918

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

前端JS使用canvas加水印(全屏、单图)

本文介绍了两种使用Canvas实现图片水印的方法:1) 单图水印:通过JavaScript在指定图片上添加中心位置的水印文字,可设置字体、颜色和透明度;2) 全屏水印:通过动态创建Canvas元素覆盖整个页面,以网格形式重复显示水印文字,支持旋转角度、间距调整和响应式布局。两种方法都通过设置z-index和pointer-events确保不影响页面交互,其中全屏水印还提供了性能优化建议,包括监听窗口变化重新绘制和使用图片水印等技巧。文章包含完整的HTML和JavaScript代码示例,帮助开发者快速实现图片

weixin_36363743的博客 847

前端实现可绘制的canvas画布_JS前端基于canvas给图片添加水印

前两天给个人网站添加了一个小功能,就是在文章编辑上传图片的时候自动给图片加上水印。给网页图片添加水印是个常见的功能,也是互联网内容作者保护自己版权的方法之一。本文简单记录一下借助canvas在前端实现图片添加水印的实现方法。canvas元素其实就是一个画布,我们可以很方便地绘制一些文字、线条、图形等,它也可以将一个img标签里渲染的图片画在画布上。在上传文件到后端的时候,使用input标签读取用户...

weixin_36139471的博客 2478

常见的为网页添加水印的方法

摘要 本文介绍了三种为网页添加水印的方法: CSS伪元素:通过::before创建半透明文本水印,简单易用但效果单一。 SVG:嵌入矢量图形水印,支持复杂效果且不失真,但需额外管理文件。 JavaScript+Canvas:动态绘制水印,灵活适配页面,但代码复杂且可能影响性能。 开发者可根据需求选择合适方案,平衡实现难度与效果,保护网页版权安全。

你若盛开,清风自来 1743

基于canvas实现的图片加水印功能

基于canvas实现的图片加水印功能。

猫晨的技术小屋 1452

js canvas图片添加重复背景水印

/** * 给图片添加水印 * @memberof DomUtils. * @param {string} dataUrl - png图片的data url * @param {string} text - 水印文字 */ watermarkImage (dataUrl, text, style = {opacity: 0.5, font: '14px serif'...

Challenge Next Challenge 1740

js图片添加文字水印并设置水印居中的方法

公司有一个需求,需要在一个图片模板上添加文字水印供客户端保存下载,这个简单的功能用后端语言来实现觉得没有必要,所以参考网上的文章,使用js结合canvas就给实现出来了,效果还可以,兼容性还未测试 ,下面是效果图跟具体代码 参考地址:https://blog.youkuaiyun.com/weixin_39958248/article/details/117890432?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-tas.

weixin_44540711的博客 1169
上一篇: 好久没写选择排序了刚好学java就自己写一下
下一篇: mysql修改my.ini遇到的权限问题 及mysql的启动和关闭。
wen_binObject
博客等级 码龄10年 51粉丝 63原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值