图片的各种转换

项目中遇到的一些处理图片的方法,这里简单做个总结

1. 判断所选文件是否为图片

正则判断image类型即为图片

onChange(file) {
    if (!(/^image\/.*$/i.test(file.type))) {
        this.$message.error("请选择图片")
        return
    }
},

2. 图片文件转base64

在一些选择图片回显之类的操作中可能会用到

onChange(file) {
    let _this = this
    let freader = new FileReader()
    freader.readAsDataURL(file)
    freader.onload = function (e) {
        _this.imgUrl = e.target.result
    }
},

3. 验证网络图片地址是否为图片

可以用new Image()的特性作为判断

isImageUrl(imgurl) {
    let _this = this
    let ImgObj = new Image()
    ImgObj.src = imgurl
    ImgObj.onerror = ()=> {
        this.$message.error("图片地址错误")
        return false
    }
    ImgObj.onload = () => {
        if (ImgObj.width > 0 && ImgObj.height > 0) {
            // 是图片
            _this.imgUrl = imgurl
        } else {
            this.$message.error("图片地址错误")
            return false
        }
    }
}

4. 网络图片转blob对象

转为blob可以优化加载速度,同时也方便后续转为base64

urlToBlob(imgurl) {
  let _this = this
  let xhr = new XMLHttpRequest();
  xhr.open('get', imgurl, true);
  xhr.responseType = 'blob';
  xhr.onload = function (res) {
    if (res.target.status === 200) {
      let imgBlob = res.target.response
    }
  };
  xhr.send();
},

5. blob转base64

方便后面base64转file文件(如果需要的话)

blobToUrl(blob) {
  let _this = this
  let freader = new FileReader();
    freader.readAsDataURL(blob);
    freader.onload = function (e) {
      _this.imgUrl = e.target.result
    }
},

6. base64转file文件

当需要上传file文件时,可以这么干

// dataurl: base64, filename: 文件名, filetype: 文件类型(例: image/jpeg)
baseToFile(dataurl,filename,filetype) {
  let arr = dataurl.split(",")
  let bstr = atob(arr[1])
  let n = bstr.length
  let u8arr = new Uint8Array(n)
  while (n--) {
    u8arr[n] = bstr.charCodeAt(n)
  }
  let file =  new File([u8arr], filename, {
    type: filetype
  })
},

7. 文件重命名

有时候受命名规范影响时,可以这么干

onChange(file) {
  let type = file.type.split('/')
  const renameFile = new File([file], 'newName' + type[1], {type: file.type})
  console.log(renameFile)
},

8. file文件转url

不知道干啥用,凑个篇幅,有用的就用一下

getObjectURL(file) {
  let url = ""
  if (window.createObjectURL !== undefined) {
    // basic
    url = window.createObjectURL(file)
  } else if (window.URL !== undefined) {
    // mozilla(firefox)
    url = window.URL.createObjectURL(file)
  } else if (window.webkitURL !== undefined) {
    // webkit or chrome
    url = window.webkitURL.createObjectURL(file)
  }
  return url
},

好了,感觉不写点文字,被提示文章不规范,这里就凑下字数,请自动忽略~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值