首页 > 其他分享 >图片添加水印

图片添加水印

时间:2023-05-24 16:56:47浏览次数:33  
标签:img ctx 水印 objmsg 添加 fontsize str var 图片

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;

  使用

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)
            }
        })

  

标签:img,ctx,水印,objmsg,添加,fontsize,str,var,图片
From: https://www.cnblogs.com/duokexiao/p/17428848.html

相关文章

  • 使用《start图片编辑器》快速抠出人物头发
    《start图片编辑器》已发布了!在微软商店下载:https://www.microsoft.com/store/productId/9NMTP62QL5L2今天来实例展示一下《start图片编辑器》如何将一张图片轻松的快速抠出人物头发 1.首先,打开《start图片编辑器》,点击选取图片2.选区图片后,右键点击图层,选择-栅格化图层......
  • 直播app开发,基于van-uploader封装的文件上传图片压缩组件
    直播app开发,基于van-uploader封装的文件上传图片压缩组件1、调用<template>  <div>    <compress-uploaderv-model="fileList":compressSwitch="true":quality="0.5":maxCount="3"/>  </div></template> <......
  • iOS 裁剪图片
    ////ViewController.m//test_btn_image_01////Createdbycddon16/7/4.//Copyright©2016年jeffasd.Allrightsreserved.//#import"ViewController.h"@interfaceViewController()@end@implementationViewController-(void)viewDi......
  • Markdown标题自动添加编号
    用markdown写文档很方便,但是有个困扰的地方,就是标题的编号问题。写文档的时候,经常会在中间插入新的标题和内容,所以手动管理编号的话,如果新的标题插在前面,则要调整后面所有的编号。如果在文档完成后再手动加上编号的话,不仅容易忘记,而且有时候我们是在其他编辑器里编辑文档再导出......
  • 如何给布局或者控件添加边框
    如何给布局或者控件添加边框我在学习和开发JavaFX程序时,对Pane会有一些疑问,比如:它们的大小是怎样的?它们的大小和父节点或者窗口的关系是怎样的?相同的问题在控件上也存在,比如一个Label到底占据了多大的空间(因为默认Label没有边框展示)?我想,如果可以给布局或者控件添加......
  • img圆角图片
    Bootstrap 对图片的支持。Bootstrap 提供了三个可对图片应用简单样式的class:.img-rounded:添加style="border-radius:6px"来获得图片圆角。.img-circle:添加border-radius:500px来让整个图片变成圆形。.img-thumbnail:添加一些内边距(padding)和一个灰色的边框。<img>类以下......
  • centos 6上 yum检查epel源是否添加成功报错 Cannot retrieve metalink for repository
    在我们使用yum安装时,经常发现没有第三方源,此时需要安装epel(ExtraPackagesforEnterpriseLinux,企业版Linux的额外软件包)Epel是什么?它是Fedora小组维护的一个软件仓库项目,为RHEL/CentOS提供他们默认不提供的软件包。这个源兼容RHEL及像CentOS和ScientificLinux这样的衍生版本......
  • uniapp 数组添加不重复元素
    if(this.checkTimes.includes(_item.time)){this.checkTimes=this.checkTimes.filter((item)=>{returnitem!=_item.time;});}else{this.ch......
  • 3d打印机添加AI炒面检测服务 klipper+fluidd ubuntu本地部署TheSpaghttiDetective Ser
    炒面检测(TheSpaghettiDetective)介绍:炒面检测服务可以借助打印机的摄像头,检测打印是否炒面(打印失败)并作出提醒或停止打印的一种服务,该服务由服务器和客户端组成客户端支持两种: ocoprint或klipper服务器也有两种:ocobi官方提供的有限免费服务......
  • 多线程下载图片并压缩
    从ftp服务器下载文件,文件里是多张图片的name和uri,格式是name||uri,根据uri下载图片并压缩存储到本地服务器主要流程:1 从ftp服务器下载文件,2 将文件格式解析后的地址存入map容器内,3 计算每个线程需要下载的url,并循环调用threadPool.execute(mythead),子线程根据uri下......