Skip to content

Instantly share code, notes, and snippets.

@zekrom-vale
Forked from olvado/getAverageColourAsRGB.js
Last active June 1, 2017 14:07
Show Gist options
  • Save zekrom-vale/4466be7b63a48ee7d2944dc4990b767c to your computer and use it in GitHub Desktop.
Save zekrom-vale/4466be7b63a48ee7d2944dc4990b767c to your computer and use it in GitHub Desktop.
Get the average colour of an image in javascript using getImageData in CANVAS
function getAvColor (img) {
var canvas = document.createElement('canvas'),
context = canvas.getContext && canvas.getContext('2d'),
rgb,
pixelInterval = 5, // Rather than inspect every single pixel in the image inspect every 5th pixel
count = 0,
data, length,
i = -4;
// return the base colour for non-compliant browsers
if (!context) return;
// set the height and width of the canvas element to that of the image
var height = canvas.height = img.naturalHeight || img.offsetHeight || img.height,
width = canvas.width = img.naturalWidth || img.offsetWidth || img.width;
context.drawImage(img, 0, 0);
try {
data = context.getImageData(0, 0, width, height);
} catch(e) {
// catch errors - usually due to cross domain security issues
alert(e);
return;
}
data = data.data;
length = data.length;
while ((i += pixelInterval * 4) < length) {
count++;
rgb.r += data.data[i];
rgb.g += data.data[i+1];
rgb.b += data.data[i+2];
}
// floor values to give correct values
rgb.r = Math.floor(rgb.r/count);
rgb.g = Math.floor(rgb.g/count);
rgb.b = Math.floor(rgb.b/count);
return rgb;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment