gpt4 book ai didi

javascript - 从图像中读取透明像素

转载 作者:搜寻专家 更新时间:2023-11-01 04:52:56 25 4
gpt4 key购买 nike

有没有办法使用javascript从图片中读取透明像素?

我认为,它可能类似于 PNG 修复程序对 IE 所做的事情(读取透明像素并应用一些东西,哈哈)。但是,是的,对于每个浏览器..

啊,要是不用HTML5也能实现就好了。

最佳答案

这个问题实际上是由来自 GoogleTechTalks 的家伙在这个关于基于 javascript 的游戏引擎的视频中回答的。 http://www.youtube.com/watch?feature=player_detailpage&v=_RRnyChxijA#t=1610s它应该从解释的地方开始。

编辑:因此,我将总结视频中讲述的内容并提供代码示例。这比我预期的要困难得多。诀窍是将图像加载到 Canvas 上,然后检查每个像素是否透明。数据被放入一个二维数组中。像 alphaData[pixelRow][pixelCol]。 0 表示透明度,而 1 则不是。当 alphaData 数组完成后,它被放入全局变量 a。

var a;
function alphaDataPNG(url, width, height) {

var start = false;
var context = null;
var c = document.createElement("canvas");
if(c.getContext) {
context = c.getContext("2d");
if(context.getImageData) {
start = true;
}
}
if(start) {
var alphaData = [];
var loadImage = new Image();
loadImage.style.position = "absolute";
loadImage.style.left = "-10000px";
document.body.appendChild(loadImage);
loadImage.onload = function() {
c.width = width;
c.height = height;
c.style.width = width + "px";
c.style.height = height + "px";
context.drawImage(this, 0, 0, width, height);
try {
try {
var imgDat = context.getImageData(0, 0, width, height);
} catch (e) {
netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
var imgDat = context.getImageData(0, 0, width, height);
}
} catch (e) {
throw new Error("unable to access image data: " + e);
}
var imgData = imgDat.data;
for(var i = 0, n = imgData.length; i < n; i += 4) {
var row = Math.floor((i / 4) / width);
var col = (i/4) - (row * width);
if(!alphaData[row]) alphaData[row] = [];
alphaData[row][col] = imgData[i+3] == 0 ? 0 : 1;
}
a=alphaData;
};
loadImage.src = url;
} else {
return false;
}
}

我在 Firefox 中本地运行时出错,try catch 语句解决了它。哦,我得吃饭了……

编辑 2:所以我吃完了晚饭,我想添加一些我用过的资源,它们可能会有帮助。

https://developer.mozilla.org/En/HTML/Canvas/Pixel_manipulation_with_canvas有关 imageData 对象的信息。

http://blog.nihilogic.dk/2008/05/compression-using-canvas-and-png.html有关 imageData 对象及其用途的更多信息。

http://www.nihilogic.dk/labs/canvascompress/pngdata.js这是一个非常有用的使用 imageData 的示例,我提供的代码在很大程度上与此类似。

http://www.youtube.com/watch?v=_RRnyChxijA有关使用 JavaScript 编写游戏引擎脚本的信息,真的非常有趣。

http://blog.project-sierra.de/archives/1577有关在 firefox 中使用 enablePrivilege 的信息。

关于javascript - 从图像中读取透明像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6816565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com