阅读图像像素
是否可以读取画布A中图像的像素并在画布B上创建像素?我只想在图像的像素为绿色的情况下在画布B上创建新的像素。 例如。如果图像的像素(120,45)为绿色,我需要在画布B中创建一个绿色的像素(120,45)阅读图像像素
您可以使用canvas ImageData获取每个像素的颜色值。功能:
context.getImageData(left, top, width, height);
返回ImageData对象,该对象包括以下属性:
- 宽度
- 高度
- 数据(CanvasPixelArray)
的CanvasPixelArray
包含所有像素的RGBA值,从t开始左转右移到右下方。换句话说,它是一个包含4*width*height
条目数量的数组。
使用它,您可以开始循环每个像素(每个像素的+=4
条目),并检查RGBA值。如果它们匹配您想要的特定值,即绿色,那么您将该值复制到画布B,您可以通过修改新创建的ImageData对象来创建画布B.
您可以创建一个新的空的ImageData对象:
context.createImageData(cssWidth, cssHeight)
请注意,您需要知道识别“绿色”的具体RGBA值或定义特定的条件,也就是说,如果RGBA的G值是>= 150
那么它就是“绿色”。
另外请注意,你不能得到ImageData
已被污染的资源以外的来源。即,如果您将图像绘制到不是CORS安全的画布上,则无法再从该画布检索ImageData
,就像您不能使用toDataURL
一样。
谢谢。我尝试过'getImageData()'和'putImageData()'来反转图像,并认为这可能是正确的方法。但我不确定像素是否会在画布B中的相同x,y坐标处创建,如同在图像中一样。 – user1004912 2012-02-24 12:06:53
@ user1004912如果您指定了相同的尺寸并将新创建的ImageData对象放置到您从中提取最初的一个的相同位置,那么它们的尺寸/位置将完全相同。 – Niklas 2012-02-24 12:08:54
你想使用哪种语言? PHP的? – JuSchz 2012-02-24 11:24:34
这可能是一个很好的开始:http://beej.us/blog/2010/02/html5s-canvas-part-ii-pixel-manipulation/ – 2012-02-24 11:45:23
@julesanchez我不知道你可以使用PHP来交互与HTML画布。 – JJJ 2012-02-24 11:47:44