canvas截取video图片并保存在本地

cutLiveVideo() {
  var c = document.createElement("canvas");
  var ctx = c.getContext('2d');
  var v = document.getElementById('remoteVideo')
  var height = v.videoHeight;
  var width = v.videoWidth;
  c.height = height
  c.width = width
  ctx.drawImage(v, 0, 0, width, height)
  var url = ''
  url = c.toDataURL('image/png', 1);
  this.saveFile(url, 'abcd.png')
},
saveFile(strDataURL, filename) {
  var arr = strDataURL.split(','),
    mime = arr[0].match(/:(.*?);/)[1],
    bstr = atob(arr[1]),
    n = bstr.length,
    u8arr = new Uint8Array(n);
  while (n--) {
    u8arr[n] = bstr.charCodeAt(n);
  }
  var blob = new Blob([u8arr], {
    type: mime
  });
  var url = window.URL.createObjectURL(blob);
  var a = document.createElement('a');
  a.style.display = 'none';
  a.href = url;
  a.download = filename;
  document.body.appendChild(a);
  a.click();
  setTimeout(function() {
    document.body.removeChild(a);
    window.URL.revokeObjectURL(url);
  }, 1000);
},

其实原理就是创建一个canvas,然后从video中取一帧视频绘制到canvas中,再从canvas中把图片转成blob数据后创建url,最后创建一个a标签并自动点击下载,然后销毁a标签。

函数cutLiveVideo是通过canvas从video中截取一张照片,获取到base64的url码。 函数saveFile是创建一个a标签,将到base64的url复制给a标签的url,通过a标签的download属性,下载图片并保存在本地。

results matching ""

    No results matching ""