• 基于vant上传图片添加水印


    获取文件

    afterRead(file, name) {
          let that =this;
          file.message = "上传中...";
          file.status = "uploading";
          return new Promise(() => {
            const fileName = file.name
            const reader = new FileReader()
            reader.readAsDataURL(file.file)
            reader.onload = () => {
              getImgUrl({
                url: reader.result,
                that,
                cb: (base64) => {
                  let newForm = file;
                  newForm.content = base64;
                  this.uploadAxios(newForm, name);
                }
              })
            }
          })
        },
    
    uploadAxios(file, name) {
      let formData = new FormData();
      // formData.set("file", file.file);
      let blob = dataURItoBlob(file.content);
      formData.append("file", blob,'image.png');
      formData.set("fileType", 0);
      formData.set("type", this.personTypeDesc || "event");
      formData.set("path", "event");
      formData.set("userId", localStorage.staffId);
      uploadFile(formData)
        .then(({ success, data }) => {
          if (success) {
            file.status = "success";
            this.handlePicture.push(data);
          } else {
            file.status = "failed";
            Toast({
              message: "图片上传服务失败",
            });
            this.fileList.splice(name.index, 1);
          }
        })
        .catch((err) => {
          file.status = "failed";
          file.message = "上传失败";
        });
    },
    

    通过canvas添加水印

    export function getImgUrl ({
        url = '',
        that,
        imgWidth=98,
        imgHight= 98,
        content,
        cb = null
      }) {
        const img = new Image()
        img.src = url
        img.crossOrigin = 'anonymous'
        img.onload = function () {
          const canvas = document.createElement('canvas')
          canvas.width = imgWidth;
          canvas.height = imgHight;
          const ctx = canvas.getContext('2d')
          ctx.drawImage(img, 0, 0);
          ctx.fontSize="8px";
          // 单独绘制水印
          content = that.$moment(new Date()).format("YYYY-MM-DD HH:mm:ss");
          ctx.fillText(content,0,20);
          const base64Url = canvas.toDataURL()
          // return base64Url
          cb && cb(base64Url)
        }
      }
    

    将base64转化为二进制

    export function dataURItoBlob(base64Data) {
        var byteString;
        if (base64Data.split(',')[0].indexOf('base64') >= 0)
        byteString = atob(base64Data.split(',')[1]);
        else
        byteString = unescape(base64Data.split(',')[1]);
        var mimeString = base64Data.split(',')[0].split(':')[1].split(';')[0];
        var ia = new Uint8Array(byteString.length);
        for (var i = 0; i < byteString.length; i++) {
        ia[i] = byteString.charCodeAt(i);
        }
        return new Blob([ia], {type:mimeString});
        }
    
  • 相关阅读:
    Vue-router2.0学习笔记(转)
    vue-cli 搭建项目
    打开一个vue项目
    Webpack,Browserify和Gulp三者之间到底是怎样的关系
    读取ByteBuffer有效的数据
    node-sass 安装失败的解决措施[转]
    SpringCloud2.0
    Docker
    分布式文件系统之FastDFS
    SVN的使用
  • 原文地址:https://www.cnblogs.com/zhoulongfei/p/14705082.html
Copyright © 2020-2023  润新知