【发布时间】:2012-04-18 15:02:03
【问题描述】:
我正在使用 rgb 像素数据绘制图像。我需要为该图像设置透明背景颜色。我可以为 alpha 设置什么值成为透明图像?或者还有其他解决方案吗?
【问题讨论】:
标签: image html canvas pixel transparent
我正在使用 rgb 像素数据绘制图像。我需要为该图像设置透明背景颜色。我可以为 alpha 设置什么值成为透明图像?或者还有其他解决方案吗?
【问题讨论】:
标签: image html canvas pixel transparent
0 的 alpha 表示像素是完全透明的,255 的 alpha 值是完全不透明的,这意味着它将没有透明度。
如果您的图像部分是完全透明的(alpha 为 0),那么只要使用 0 的 Alpha 值,您使用什么 RGB 值就无关紧要了。另外请注意,我有一些较旧的 windows 程序使用假设左上像素或右下像素将用作透明度颜色。然后它会循环遍历所有像素,并在遇到此特定 RGB 值时将 alpha 设置为 0。
如果您使用 127 的 Alpha 并且图像出现在另一张图像的顶部,则看起来这两个图像同样可见,或者底部图像将 50% 的颜色渗透到顶部图像。
如果您想测试并查看将其应用于整个图像时的外观,请为 alpha 设置一个变量。
【讨论】:
如果我了解您的需求,您基本上希望将图像上的特定颜色变为透明。为此,您需要使用getImageData 查看mdn for an explanation on pixel manipulation。
这里有一些示例代码
var imgd = ctx.getImageData(0, 0, imageWidth, imageHeight),
pix = imgd.data;
for (var i = 0, n = pix.length; i <n; i += 4) {
var r = pix[i],
g = pix[i+1],
b = pix[i+2];
if(g > 150){
// If the green component value is higher than 150
// make the pixel transparent because i+3 is the alpha component
// values 0-255 work, 255 is solid
pix[i + 3] = 0;
}
}
ctx.putImageData(imgd, 0, 0);
使用上面的代码,您可以使用以下方法检查紫红色
if(r == 255 && g == 0 && b == 255)
【讨论】:
putImageData 将数据放在新的画布上,这就是您要移动的内容而不是图像。
我想你想要 clearRect 画布方法:
http://www.w3schools.com/html5/canvas_clearrect.asp
这将让您将像素清除为透明(或任何其他 RGBA 颜色),而无需大惊小怪或像素操作。
【讨论】: