LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

[点晴永久免费OA]使用原生JS脚本实现给图片增加水印

admin
2023年4月7日 16:40 本文热度 1283

使用原生js给图片增加水印
支持自定义 【 水印旋转角度、字体大小、字体颜色、稠密度… 】

效果图

直接上代码(含注释)
HTML代码

<img src="../images/birthdaybg2.jpg" id="drowsy" />

JS代码

var drawWaterMark = {};
    drawWaterMark.init = function (objmsg) {
        var canvas = document.createElement('canvas');
        var ctx = canvas.getContext('2d');
        var img = new Image();
        img.src = objmsg.imgpath;
        img.setAttribute("crossOrigin", 'Anonymous');
        img.onload = function () {
            //绘制和图片大小相同的canvas
            canvas.width = img.width;
            canvas.height = img.height;
            //canvas绘制图片,0 0  为左上角坐标原点
            ctx.drawImage(img, 0, 0);
            //绘制水印
            if (objmsg.rotate != undefined && objmsg.rotate != null) {//旋转角度[默认20]
                ctx.rotate((Math.PI / 120) * -objmsg.rotate);
            } else {
                ctx.rotate((Math.PI / 120) * -20);
            }
            var fontsize = 20;
            if (objmsg.fontsize != undefined && objmsg.fontsize != null) {//字体大小[默认20px]
                fontsize = objmsg.fontsize;
            }
            ctx.font = fontsize + "px Microsoft Yahei";
            var fontcolor = '255, 255, 255, 0.2';
            if (objmsg.fontcolor != undefined && objmsg.fontcolor != null) {//字体颜色透明度[默认白色]
                fontcolor = objmsg.fontcolor;
            }
            ctx.fillStyle = "rgba(" + fontcolor + ")";
            ctx.textAlign = "center";
            ctx.textBaseline = "middle";
            var density = 3;
            if (objmsg.density != undefined && objmsg.density != null) {//稠密度[默认3]
                density = objmsg.density            }
            for (var i = -1000; i < img.height; i += img.width / density) {
                for (var k = 0; k < img.height; k += img.width / density) {
                    var str = objmsg.str;
                    if (str.length == 1) {
                        ctx.fillText(str[0], i, k);
                    } else if(str.length==2){
                        ctx.fillText(str[0], i, k);
                        ctx.fillText(str[1], i, k + (fontsize-0+5));//多行
                    } else if (str.length == 3 || str.length > 3) {
                        ctx.fillText(str[0], i, k);
                        ctx.fillText(str[1], i, k + (fontsize - 0 + 5));//多行
                        ctx.fillText(str[2], i, k + (fontsize*2 - 0 + 5));//多行
                    }
                }
            }
            var base64 = canvas.toDataURL("image/png");//添加过水印的base64图片
            if (objmsg.domid != undefined && objmsg.domid != null) {//id图片
                document.getElementById(objmsg.domid).src = base64;
                //$(objmsg.domid).attr('src', base64);
            }
            if (objmsg.cb != undefined && objmsg.cb != null) {//回调函数
                objmsg.cb(base64);//回调函数
            }
        }
    }

使用

drawWaterMark.init({
        imgpath: "../images/birthdaybg2.jpg",//图片路径  string类型  [必传]
        rotate: 20,//旋转角度   int类型
        fontsize: 20,//字体大小
        fontcolor: "255, 255, 255, 0.7",//字体颜色  rgba类型
        density: 3,//稠密度
        str: ["我是水印", "2022-10-15"],    //[必传]
        domid: "drowsy",//图片id
        cb: function (base64) {
            console.log(base64)
        }})

配置项objmsg

objmsg = {
        imgpath: "",//图片路径  string类型  [必传]
        rotate: 20,//旋转角度   int类型  默认20
        fontsize: 20,//字体大小   默认20
        fontcolor: "",//字体颜色  rgba类型  默认 255, 255, 255, 0.2
        density: 3,//稠密度    数值越大,水印越多
        str: ["我是水印", "2022-10-15", "over"],    //水印文字 数组类型  最大三行(即lingth<=3)[必传]
        domid: "",   //图片dom的id   用来更换添加水印后的图片
        cb: function (base64) { }//回调函数,可以拿到添加水印后的图片的base64编码
    }
参数名必填参数说明示例
imgpath图片路径。支持本地图片和网络图片;图片不能跨域https://img.wenhairu.com/images/2021/12/01/1xvrC.jpg
rotate旋转角度。int类型默认2020
fontsize字体大小。默认2020
fontcolor字体颜色。reba格式,默认255,255,255,0.2255,255,255,0.2
density稠密度。数值越大,水印越多,默认33
str水印文字。数组格式,最大数组长度为3,即3行水印[“我是水印”,“2022-10-15”,“最多三行”]
domid图片id。传值用来替换水印图片drowsy
cb回调函数。用来获取添加水印后的图片base64编码function(base64){}

--------2022-10-17------------

发现问题:少数情况下加完水印后的base64编码为空白图。


该文章在 2023/4/7 16:40:51 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved