懵懵不懂摘星事丶

导航

js 文件转换

<template>
  <div class="test">
    <div class="block">
      <span class="demonstration">默认为 Date 对象</span>
      <div class="demonstration">
        值:{{ value1 }}
      </div>
      <el-date-picker
        v-model="value1"
        type="date"
        placeholder="选择日期"
        format="yyyy 年 MM 月 dd 日"
      />
    </div>
    <div class="block">
      <span class="demonstration">使用 value-format</span>
      <div class="demonstration">
        值:{{ value2 }}
      </div>
      <el-date-picker
        v-model="value2"
        type="date"
        placeholder="选择日期"
        format="yyyy 年 MM 月 dd 日"
        value-format="yyyy-MM-dd"
      />
    </div>
    <div class="block">
      <span class="demonstration">时间戳</span>
      <div class="demonstration">
        值:{{ value3 }}
      </div>
      <el-date-picker
        v-model="value3"
        type="date"
        placeholder="选择日期"
        format="yyyy 年 MM 月 dd 日"
        value-format="timestamp"
      />
    </div>
  </div>
</template>

<script>
export default {
  data () {
    return {
      value1: '',
      value2: '',
      value3: ''
    }
  },
  computed: {
    viseble () {
      return this.$store.state.person.account.visible
    }
  },
  mounted () {
    // this.urltoImage('https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=2913637001,744957801&fm=26&gp=0.jpg', (img) => {
    //   window.console.log(img)
    //   const body = document.querySelector('body')
    //   body.appendChild(img)
    // })
    // -------------------
    // const self = this
    // this.urltoImage('http://119.45.241.175:5000/File/IdCard/f482421b0d794483ba337266433ba308big.jpg', (img) => {
    //   window.console.log(img) // image 对象
    //   const cav = this.imagetoCanvas(img)
    //   this.canvasResizetoFile(cav, 0.99, (blod) => {
    //     window.console.log(blod)
    //     // window.console.log(!(blod.size / 1024 / 1024 < 2))
    //     // self.filetoDataURL(blod, (dataUrl) => {
    //     //   // window.console.log(dataUrl)
    //     //   window.console.log(self.dataURLtoFile(dataUrl))
    //     // })

    //     const File = self.blobToFile(blod, 'change.jpg')
    //     window.console.log(File)
    //   })
    //   // const body = document.querySelector('body')
    //   // body.appendChild(cav)
    // })
    const serverUrl = 'http://119.45.241.175:5000/File/IdCard/f482421b0d794483ba337266433ba308big.jpg'
    // this.urltoImage(serverUrl, (img) => {
    //   window.console.dir(img)
    // })
    this.downloadIamge(serverUrl, 123)
  },
  methods: {
    clickHandle () {
      this.$store.commit('person/account/CHANG_VISIBLE', 'edit')
    },

    downloadIamge (imgsrc, name) { // 下载图片地址和图片名
      // this.imageUrl = URL.createObjectURL(file.raw);
      const image = new Image()
      // 解决跨域 Canvas 污染问题
      image.setAttribute('crossOrigin', 'anonymous')
      image.onload = function () {
        const canvas = document.createElement('canvas')
        canvas.width = image.width
        canvas.height = image.height
        const context = canvas.getContext('2d')
        context.drawImage(image, 0, 0, image.width, image.height)
        const url = canvas.toDataURL('image/png') // 得到图片的base64编码数据
        window.console.log(url)
        const a = document.createElement('a') // 生成一个a元素
        const event = new MouseEvent('click') // 创建一个单击事件
        a.download = name || 'photo' // 设置图片名称
        a.href = url // 将生成的URL设置为a.href属性
        a.dispatchEvent(event) // 触发a的单击事件
      }
      image.src = imgsrc
    },
    // https://cunchu.51240.com/
    // https://www.cnblogs.com/lwxiao/p/10519617.html
    // https://blog.csdn.net/zhoudekuai/article/details/88360076
    // urltoImage(url,fn) 会通过一个url加载所需要的图片对象,其中 url 参数传入图片的 url , fn 为回调方法,包含一个Image对象的参数
    urltoImage (url, fn) {
      const img = new Image()
      img.crossOrigin = 'Anonymous'
      img.src = url
      img.onload = function () {
        fn(img)
      }
    },
    // imagetoCanvas(image) 会将一个 Image 对象转变为一个 Canvas 类型对象,其中 image 参数传入一个Image对象
    imagetoCanvas (image) {
      const cvs = document.createElement('canvas')
      const ctx = cvs.getContext('2d')
      cvs.width = image.width
      cvs.height = image.height
      ctx.drawImage(image, 0, 0, cvs.width, cvs.height)
      return cvs
    },
    // canvasResizetoFile(canvas,quality,fn) 会将一个 Canvas 对象压缩转变为一个 Blob 类型对象;其中 canvas 参数传入一个 Canvas 对象; quality 参数传入一个0-1的 number 类型,表示图片压缩质量; fn 为回调方法,包含一个 Blob 对象的参数
    canvasResizetoFile (canvas, quality, fn) {
      canvas.toBlob(function (blob) {
        fn(blob)
      }, 'image/jpeg', quality)
    },
    filetoDataURL (file, fn) {
      const reader = new FileReader()
      reader.onloadend = function (e) {
        fn(e.target.result)
      }
      reader.readAsDataURL(file)
    },
    dataURLtoImage (dataurl, fn) {
      const img = new Image()
      img.onload = function () {
        fn(img)
      }
      img.src = dataurl
    },
    dataURLtoFile (dataurl) {
      const arr = dataurl.split(','); const mime = arr[0].match(/:(.*?);/)[1]
      const bstr = atob(arr[1]); let n = bstr.length; const u8arr = new Uint8Array(n)
      while (n--) {
        u8arr[n] = bstr.charCodeAt(n)
      }
      return new Blob([u8arr], { type: mime })
    },
    blobToFile (theBlob, fileName) {
    // A Blob() is almost a File() - it's just missing the two properties below which we will add
      theBlob.lastModifiedDate = new Date()
      theBlob.name = fileName
      return theBlob
    }
    // proDownImage (path, imgObj) { // 等比压缩图片工具
    //   // var proMaxHeight = 185;
    //   const proMaxHeight = 300
    //   const proMaxWidth = 175
    //   const size = new Object()
    //   const image = new Image()
    //   image.src = path
    //   image.attachEvent('onreadystatechange',
    //     function () { // 当加载状态改变时执行此方法,因为img的加载有延迟
    //       if (image.readyState == 'complete') { // 当加载状态为完全结束时进入
    //         if (image.width > 0 && image.height > 0) {
    //           const ww = proMaxWidth / image.width
    //           const hh = proMaxHeight / image.height
    //           const rate = (ww < hh) ? ww : hh
    //           if (rate <= 1) {
    //             alert('imgage width*rate is:' + image.width * rate)
    //             size.width = image.width * rate
    //             size.height = image.height * rate
    //           } else {
    //             alert('imgage width is:' + image.width)
    //             size.width = image.width
    //             size.height = image.height
    //           }
    //         }
    //       }
    //       imgObj.attr('width', size.width)
    //       imgObj.attr('height', size.height)
    //     })
    // }
  }
}
</script>

<style lang="scss" scoped>
.test {}
</style>

posted on 2020-12-06 13:09  懵懵不懂摘星事丶  阅读(159)  评论(0编辑  收藏  举报