图片添加水印
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | var drawWaterMark = {}; drawWaterMark.init = function (objmsg) { console.log(objmsg) var canvas = document.createElement( 'canvas' ); var ctx = canvas.getContext( '2d' ); var img = new Image(); img.src = objmsg.imgpath; // img.setAttribute("crossOrigin", 'Anonymous'); console.log(img) img.onload = function () { console.log(111) //绘制和图片大小相同的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) * -0); } 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图片 console.log(base64) objmsg.cb(base64); //回调函数 } } export default drawWaterMark; |
使用
1 2 3 4 5 6 7 8 9 10 11 12 | drawWaterMark.init({ imgpath: require( '@/assets/imgs/daiban/unselected.png' ), //图片路径 string类型 [必传] rotate: 0, //旋转角度 int类型 fontsize: 20, //字体大小 fontcolor: "0, 0, 0, 1" , //字体颜色 rgba类型 density: 1, //稠密度 str: [ "我是水印" , "2022-10-15" ], //[必传] domid: "srqq" , //图片id cb: function (base64) { console.log(base64) } }) |
未闻花名
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律