首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >getImageData返回白色图像

getImageData返回白色图像
EN

Stack Overflow用户
提问于 2017-12-03 13:00:45
回答 1查看 723关注 0票数 1

我需要从javascript中的图像对象读取图像数据。但是我的代码总是返回一个空白数组(设置为255)。

代码语言:javascript
复制
<html>
  <header>
  </header>
  <body>
    <input type="file" id="imgfile" onchange="testImageData(event);" />
    <canvas id="canvas1" width="640" height="480"></canvas>
    <script src="./../scripts/cam.js" ></script>
  </body>    
</html>

这是剧本

代码语言:javascript
复制
var canvas1 = document.getElementById('canvas1');
var context1 = canvas1.getContext('2d');
function getImageData(image){
  /*
    returns Uint8ClampedArray object 
    takes an image obj
  */
  var canvas = document.createElement("canvas");
  canvas.height = image.height;
  canvas.width = image.width;
  var ctx = canvas.getContext("2d");
  ctx.width = image.width;
  ctx.height = image.height;
  ctx.drawImage(image,0,0);
  return ctx.getImageData(0, 0, ctx.width, ctx.height);
}

function testImageData(event){
  var selectedFile = event.target.files[0];
  var reader = new FileReader();
  var img = new Image();

  reader.onload = function(event) {
    console.log('onload');
    img.src = event.target.result;
    img.onload = function(){
      context1.drawImage(img, 0,0, img.width, img.height);
      var imgData = getImageData(img);
      // console.log(imgData);
      var data = imgData.data;
      for(var i = 0; i<data.length;i+=4){
        console.log(data[i],data[i+1],data[i+2],data[i+3]);
      }
    }
  };

据我理解,console.log应该返回RGBA中的数据。但我刚拿到255个。

console.log输出

编辑:

好吧,我在附近找到了一份工作,但我不明白为什么会这样。

相反,我使用getImageData,直接从绘制的context1获取数据。

代码语言:javascript
复制
function testImageData(event){
  var selectedFile = event.target.files[0];
  var reader = new FileReader();
  var img = new Image();

  reader.onload = function(event) {
    console.log('onload');
    img.src = event.target.result;
    img.onload = function(){
      context1.drawImage(img, 0,0, img.width, img.height);
      var imgData = context1.getImageData(0,0,img.width,img.height);
      var data = imgData.data;
      for(var i = 0; i<data.length;i+=4){
        console.log(data[i],data[i+1],data[i+2],data[i+3]);
      }
    }
  };

因此,问题必须在于创造一个新的画布。

EN

回答 1

Stack Overflow用户

发布于 2017-12-03 13:03:51

您应该等待图像加载img.onload,等待读取器加载事件.

你也忘了看文件..。错过了reader.readAsDataURL,但你不需要文件机。

代码语言:javascript
复制
window.URL = window.URL || webkitURL
var img = new Image();
img.src = URL.createObjectURL(file)
img.onload = function(){
  // put your image on the canvas
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47618626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档