前端技术实现js图片水印

attendanceClick(userID,headImg,userName,company,scoreNmu) {
let base64Image = 'assets/imagesaring.png';
let base64Image1 = 'assets/imagesaring1.png';
let base64Image2 = 'assets/imagesaring2.png';
let base64Image3 = 'assets/imagesaring3.png';
let base64Image4 = 'assets/imagesaring4.png';
let base64Image5 = 'assets/imagesaring5.png';
//加水印
var canvas = document.createElement('canvas');
var cxt = canvas.getContext('2d');
cxt.fillStyle = 'green';
cxt.fillRect(10, 10, 100, 100);
var img = new Image();
if (scoreNmu>=60&&scoreNmu<70) {
  img.src = base64Image1;
} else if (scoreNmu>=70&&scoreNmu<80){
  img.src = base64Image2;
} else if (scoreNmu>=80&&scoreNmu<90){
  img.src = base64Image3;
} else if (scoreNmu>=90&&scoreNmu<95){
  img.src = base64Image4;
} else {
  img.src = base64Image5;
}
if ( headImg == null || headImg == '' ) {
  headImg = 'assets/images/0.png';
}
img.onload = () => {
  var date: string = new Date().toLocaleDateString();
  var datetime: string = date;//添加日期
  canvas.height = img.height;
  canvas.width = img.width;
  cxt.drawImage(img,0,0,img.width,img.height,0,0,img.width,img.height);
  cxt.save();
  cxt.font = 20 + "px Arial";
  cxt.textBaseline = 'middle';//更改字号后,必须重置对齐方式,否则居中麻烦。设置文本的垂直对齐方式
  cxt.textAlign = 'center';
  let ftop = 715;
  let fleft = 630;
  cxt.fillStyle="#000";
  cxt.fillText(datetime,fleft,ftop);//文本元素在画布居中方式
  try {
    let tempImage = new Image();
    tempImage.onload = () => {
      let tempImageX = 180;
      let tempImageY = 310;
      let tempImageW = 140;
      let tempImageH = 140;
      cxt.drawImage(tempImage,tempImageX,tempImageY,tempImageW,tempImageH);
      // 用户名
       let tempTextData = userName;
      cxt.save();
      cxt.font = 40 + "px Arial";
      cxt.textBaseline = 'middle';
      cxt.textAlign = 'left';
      let tempNameX = 360;
      let tempNameY = 350;
      cxt.fillStyle="#000";
      cxt.fillText(tempTextData,tempNameX,tempNameY);

    // 公司名字
      let tempCompanyData = company;
      if (this.globalFunction.isNull(tempCompanyData)) {
        tempCompanyData = '平安人寿';
      }
      cxt.save();
      cxt.font = 40 + "px Arial";
      cxt.textBaseline = 'middle';
      cxt.textAlign = 'left';
      let tempCompanyX = 360;
      let tempCompanyY = 420;
      cxt.fillText(tempCompanyData,tempCompanyX,tempCompanyY);
      this.canvasImage = canvas.toDataURL("image/jpg");
      let tempSrc = this.canvasImage.substring(22);
        this.interfaceService.doUpdateRankingPath(userID,tempSrc);
      }
      tempImage.crossOrigin="anonymous";
      tempImage.src = headImg;
    } catch (error) {
      console.log('出现错误'+error);
    } 
  }
}
原文地址:https://www.cnblogs.com/ChineseLiao/p/7652086.html