Javascript - 画布上的 getImageData 总是返回 alpha 255
Javascript - getImageData on canvas always returns alpha 255
我正在尝试使用 javascript 和画布读取图像中的 alpha 值,但 getImageData 返回的 ImageData 的 alpha 部分始终为 255,即使处理后的图像仅由透明像素组成。这是我所做的:
var img = new Image();
img.src = "url/to/an/image/with/transparency";
var canvas = document.createElement('canvas');
var context = canvas.getContext('2d');
context.drawImage(img, 0, 0);
var data = context.getImageData(0, 0, img.width, img.height).data;
for(var i = 0; i<data.length; i+=4){
console.log(data[i+3]);
}
这始终输出 255。我已经找到了这个,但它并没有真正帮助我:新手不断失去画布中的阿尔法值
无论我尝试什么,它都行不通。
编辑:这是我的完整代码:http://pastebin.com/3giQCWvP
错误发生在 generateCollisionGrid() 函数中。我发现红色和绿色也总是255。
这是我用于测试的图像:https://addons.opera.com/media/extensions/03/1303/1.4-rev1/icons/icon_64x64.png
我遇到了同样的问题,发现我需要设置context.globalCompositeOperation = "copy"
以确保 alpha 覆盖目标数据。
您的代码可能存在几个问题:
- 图像可能并不真正透明。
- 当您尝试绘制图像时,图像可能未完全加载。使用
img.onload
等到 img 完全加载后再尝试绘制它。 - 当您
createElement('canvas')
画布的默认大小为 300x150 时,您的图像可能大于或小于默认画布大小。使用canvas.width=img.width
&canvas.height=img.height
将画布大小设置为 img 大小。 - 如果图像 URL 来自与网页不同的域,则会引发安全错误。此错误条件将阻止
.getImageData
返回数据。
下面是为避免这些问题而重构的代码:
var img=new Image();
img.crossOrigin='anonymous';
img.onload=start;
img.src="https://dl.dropboxusercontent.com/u/139992952/multple/icon_64x64.png";
function start(){
var canvas = document.createElement('canvas');
document.body.appendChild(canvas);
canvas.width=img.width;
canvas.height=img.height;
var context = canvas.getContext('2d');
context.drawImage(img, 0, 0);
var data = context.getImageData(0, 0, img.width, img.height).data;
var alphas=''; // demo purposes
for(var i = 0; i<data.length; i+=4){
console.log(data[i+3]);
if(i<200){alphas+=data[i+3]+',';} // demo purposes
}
alert(alphas); // demo purposes
}
body{ background-color: ivory; }
canvas{border:1px solid red; margin:0 auto; }
相关文章:
- 节点导出返回一个空对象
- ES6构造函数返回基类的实例
- 监视函数从服务返回不起作用,但作用域函数起作用
- 控制台返回var不是't定义,但它是
- 从函数返回角度承诺
- Javascript返回值只在循环中返回一次
- 从控制器返回后Ajax启动事件激发
- CKFinder 3为所选文件返回错误的URL
- 如何将不可变的js导入angular 2(alpha)
- 如何在d3.js中返回路径的y坐标
- 如何从jquery函数返回变量
- Angular js-返回一个包含类似
- JSONP请求返回结果,但也触发error_callback
- 如何使用Spring MVC将Facebook返回的响应数据保存在Java类中
- 从HTTPGET返回一个自定义对象列表,以便在Angular 2应用程序中使用
- JS验证ajax返回的html中的表单数据
- 使用谷歌应用程序脚本将服务器端数据表返回到客户端
- AJAX:$_GET不返回任何值
- 从Javascript方法返回全局变量
- Javascript - 画布上的 getImageData 总是返回 alpha 255