【问题标题】:Save images data of canvas in JavaScript在 JavaScript 中保存画布的图像数据
【发布时间】:2020-06-05 19:41:26
【问题描述】:

我正在尝试将网络摄像头中的图像捕获到画布中,并且我想将此图像数据存储为像素数组。请问如何保存?

这就是我将图片从网络摄像头绘制到上下文的方式:

context = canvas.getcontext('2d');
captureButton.addEventListerner('click', ()=> {
context.drawImage(player, 0, 0, canvas.width. canvas.height);}

播放器在 html 中定义为<video id='player' controls autoplay></video>

最好的问候

【问题讨论】:

标签: javascript html arrays image canvas


【解决方案1】:

这是我已经在我的库 jsia 中完成的事情,所以我将在这里为您展开:

由于安全限制,这在 Stack Exchange 上不起作用,但您可以在 https://mellen.github.io/jsiaExamples/barcodeReader 看到它的工作原理

var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
var vid = document.getElementById('vid');

function setupVideoCallback(videoElement, callbackCapture, callbackError, timeBetweenFrames)
{
  var localMediaStream = null;

  navigator.getUserMedia = ( navigator.getUserMedia ||
                             navigator.webkitGetUserMedia ||
                             navigator.mozGetUserMedia ||
                             navigator.msGetUserMedia );

  var um = navigator.mediaDevices.getUserMedia({video: true}).then(handleVid).catch(vidErr);
		
  if(!um)
  {
    um = navigator.getUserMedia({video: true}, handleVid, vidErr);
  }

  function handleVid(stream)
  {
    videoElement.srcObject = stream;
    localMediaStream = stream;
  }
		
  function vidErr(e)
  {
    callbackError(e)
  }

  function capture()
  {
    if(localMediaStream)
    {
      callbackCapture();
    }
  }

  setInterval(capture, timeBetweenFrames);
}

function drawVideoOnCanvas()
{
	 canvas.width = vid.clientWidth;
	 canvas.height = vid.clientHeight;
	     
	 ctx.drawImage(vid, 0, 0);
}

setupVideoCallback(vid, drawVideoOnCanvas, e => console.log(e), 10);
<canvas id="canvas"></canvas>
<video autoplay style="visibility:hidden" id="vid"></video>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-22
    • 2011-09-19
    • 2013-02-08
    • 2015-05-22
    • 1970-01-01
    • 2012-07-08
    相关资源
    最近更新 更多