सबसे पहले, एक canvas
पर छवि आकर्षित:
function draw(img) {
var canvas = document.createElement("canvas");
var c = canvas.getContext('2d');
c.width = canvas.width = img.width;
c.height = canvas.height = img.height;
c.clearRect(0, 0, c.width, c.height);
c.drawImage(img, 0, 0, img.width , img.height);
return c; // returns the context
}
अब आप छवि के पिक्सल से अधिक पुनरावृति कर सकते हैं। रंग-पहचान के लिए एक बेवकूफ दृष्टिकोण छवि में प्रत्येक रंग की आवृत्ति को गिनना है।
// returns a map counting the frequency of each color
// in the image on the canvas
function getColors(c) {
var col, colors = {};
var pixels, r, g, b, a;
r = g = b = a = 0;
pixels = c.getImageData(0, 0, c.width, c.height);
for (var i = 0, data = pixels.data; i < data.length; i += 4) {
r = data[i];
g = data[i + 1];
b = data[i + 2];
a = data[i + 3]; // alpha
// skip pixels >50% transparent
if (a < (255/2))
continue;
col = rgbToHex(r, g, b);
if (!colors[col])
colors[col] = 0;
colors[col]++;
}
return colors;
}
function rgbToHex(r, g, b) {
if (r > 255 || g > 255 || b > 255)
throw "Invalid color component";
return ((r << 16) | (g << 8) | b).toString(16);
}
getColors
रंगीन नामों और गणनाओं का नक्शा देता है। पारदर्शी पिक्सेल छोड़ दिया जाता है। इस मानचित्र से सबसे अधिक बार देखा जाने वाला रंग प्राप्त करना मुश्किल होना चाहिए।
आप सचमुच प्रत्येक रंग घटक के एक औसत चाहते हैं, तो आप आसानी से कि getColors
के परिणामों से, हो सकता है भी, लेकिन परिणाम बहुत उपयोगी होने की संभावना नहीं हैं। This answer एक बेहतर दृष्टिकोण बताता है।
आप इस तरह यह सब का उपयोग कर सकते हैं:
// nicely formats hex values
function pad(hex) {
return ("000000" + hex).slice(-6);
}
// see this example working in the fiddle below
var info = document.getElementById("info");
var img = document.getElementById("squares");
var colors = getColors(draw(img));
for (var hex in colors) {
info.innerHTML += "<li>" + pad(hex) + "->" + colors[hex];
}
एक working example देखें।
जावास्क्रिप्ट अपलोड की गई फाइलों को स्वयं ही संभाल नहीं सकता है। – alex
क्या आप केवल सटीक पिक्सेल रंग चाहते हैं, या किसी विशेष एचएसवी रेंज के भीतर? (मैं सुझाव दूंगा कि उत्तरार्द्ध आपको बेहतर सेवा देगा।) – Phrogz