You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
23 lines
1.3 KiB
23 lines
1.3 KiB
9 years ago
|
module.exports = function desaturate(image){
|
||
|
var width, height;
|
||
|
if(image.data){
|
||
|
var src = image.data;
|
||
|
width = image.width, height = image.height;
|
||
|
var dst = new Uint8Array(width * height);
|
||
|
var srcLength = src.length | 0, srcLength_16 = (srcLength - 16) | 0;
|
||
|
|
||
|
for (var i = 0, j = 0; i <= srcLength_16; i += 16, j += 4) {
|
||
|
// convert to grayscale 4 pixels at a time; eveything with alpha gets put in front of 50% gray
|
||
|
dst[j] = (((src[i] * 77 + src[i+1] * 151 + src[i+2] * 28) * src[i+3]) + ((255-src[i+3]) << 15) + 32768) >> 16
|
||
|
dst[j+1] = (((src[i+4] * 77 + src[i+5] * 151 + src[i+6] * 28) * src[i+7]) + ((255-src[i+7]) << 15) + 32768) >> 16
|
||
|
dst[j+2] = (((src[i+8] * 77 + src[i+9] * 151 + src[i+10] * 28) * src[i+11]) + ((255-src[i+11]) << 15) + 32768) >> 16
|
||
|
dst[j+3] = (((src[i+12] * 77 + src[i+13] * 151 + src[i+14] * 28) * src[i+15]) + ((255-src[i+15]) << 15) + 32768) >> 16
|
||
|
}
|
||
|
for (; i < srcLength; i += 4, ++j) //finish up
|
||
|
dst[j] = (((src[i] * 77 + src[i+1] * 151 + src[i+2] * 28) * src[i+3]) + ((255-src[i+3]) << 15) + 32768) >> 16
|
||
|
image = dst;
|
||
|
} else {
|
||
|
throw 'Expected ImageData'
|
||
|
}
|
||
|
return image
|
||
|
}
|