Moh*_*dey 17 javascript html5 canvas
在HTML5或Canvas(或任何其他HTML5技术)的帮助下,是否有人有一个很好的解决方案来改变非透明区域的颜色.
我google了很多,发现了一些可以改变图像颜色的解决方案(使用Canvas),比如
但是这些解决方案也将透明背景改变为给定的颜色(我不想要).

它是一个具有透明背景的stackoverflow png图像.现在,我想改变图像颜色而不影响它的透明像素(背景),这样我就可以toDataURL借助新方法的canvas 方法再次保存图像.
我不确定是否可以使用HTML5.任何帮助都非常感谢.
提前致谢.
*******************EDITED*********************
添加了新的药丸图像(胶囊).

mar*_*rkE 31
演示(请参阅下面有关此演示的说明):http: //jsfiddle.net/m1erickson/2d7ZN/

您可以使用包含图像的RGBA像素数据的数组 context.getImageData
var imageData=context.getImageData(0,0,canvas.width,canvas.height);
var data=imageData.data;
Run Code Online (Sandbox Code Playgroud)
从那里,您可以读取(并可选地更改)每个像素的颜色.
rgba数组的布局如下:
// top-left pixel (x:0,y:0)
data[0]   red of pixel#0 (0-255)
data[1]   green of pixel#0 (0-255)
data[2]   blue of pixel#0 (0-255)
data[3]   alpha of pixel#0 (opacity: 0-255)
// next pixel (x:1,y:0)
data[4]   red of pixel#1
data[5]   green of pixel#1
data[6]   blue of pixel#1
data[7]   alpha of pixel#1
Run Code Online (Sandbox Code Playgroud)
您可以通过更改数据阵列来更改任何像素的R,G,B或A分量
例如,这会将左上角像素更改为纯红色
data[0]=255;   // red
data[1]=0;     // green
data[2]=0;     // blue
data[3]=255;   // alpha (opacity)
Run Code Online (Sandbox Code Playgroud)
关于透明度:
每个像素的alpha分量确定像素的透明度.如果您只想修改大部分不透明的像素,那么您可以轻松忽略所有半透明像素,如下所示:
// alpha is 0-255
// ignore pixels with alpha < 200 (ignore all pixels that are mostly semi-transparent)
if( data[3]<200 ) { // don't process this pixel }
Run Code Online (Sandbox Code Playgroud)
最后,您可以将修改后的像素推回画布 .putImageData
context.putImageData(imageData,0,0);
Run Code Online (Sandbox Code Playgroud)
关于演示的注意事项
使用画布的默认RGBA颜色方案很难"重新着色"图像.
因此,该演示将RGB数据转换为HSL颜色方案.这允许改变"颜色"(色调)而不影响像素的其他分量(S =颜色的饱和度,L =颜色的亮度).
重新着色像素后,修改后的HSL数据将转换回RGBA并保存到数据阵列中.
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           26465 次  |  
        
|   最近记录:  |