给上传的图片添加水印

<div id="imgList"></div>
<input type="file" accept="image/*" id="inputFile" (change)="inputFileChange()">
async inputFileChange() {
	// 获取展示用的imgList块
    const imgList = document.getElementById('imgList');
    // 获取上传文件用的input-file
    const files = document.getElementById('inputFile')['files'][0];
    console.log(files);
    let img = await this.blobToImg(files);
    console.log(img);
    let canvas = this.imgToCanvas(img);
    let blob = await this.watermark(canvas, '换表复核');
    // 此处将Blob读取到img标签,并在dom内渲染出来;如果是上传文件,可以将blob添加到FormData中
    let newImage = await this.blobToImg(blob);
    const newFiles = new window.File(
      [blob],
      files.name,
      { type: files.type }
    );
    this.fileList.push(newFiles);
    // 设置上传图片展示样式
    newImage.style.width = '100px';
    newImage.style.height = '100px';
    newImage.style.margin = '20px 20px 20px 0';
    imgList.appendChild(newImage);
  }
  
  blobToImg (blob) {
    return new Promise((resolve) => {
      if (blob) {
        var render = new FileReader();
        render.onload = function() {
          let img = new Image()
          img.src = render.result as any;
          img.addEventListener('load', () => resolve(img))
        }
        render.readAsDataURL(blob);
      }
    }) as any;
  }

  imgToCanvas (img) {
    let canvas = document.createElement('canvas');
    canvas.width = img.width;
    canvas.height = img.height;
    let ctx = canvas.getContext('2d');
    ctx.drawImage(img, 0, 0);
    return canvas;
  }
	
  watermark (canvas, text) {
    return new Promise((resolve, reject) => {
      let ctx = canvas.getContext('2d')
      // 设置填充字号和字体.样式,对齐方式
      ctx.font = "24px 宋体"
      ctx.fillStyle = "red"
      ctx.textAlign = 'left'
      // 在指定位置绘制文字,这里指定距离左下角20坐标的地方
      ctx.fillText(text, 30, canvas.height - 30)
      canvas.toBlob(blob => resolve(blob))
    }) as any;
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值