इमेज कलर एक्सट्रैक्टर - इमेज से पैलेट निकालें ऑनलाइन
किसी भी इमेज से प्रमुख रंग निकालें और कलर पैलेट जनरेट करें। HEX, RGB और HSL वैल्यू प्राप्त करें — 100% क्लाइंट-साइड, इमेज अपलोड नहीं।
अक्सर पूछे जाने वाले प्रश्न
इमेज कलर एक्सट्रैक्टर क्या है और मुझे इसकी आवश्यकता क्यों है?
इमेज कलर एक्सट्रैक्टर अपलोड की गई छवि के पिक्सेल का विश्लेषण करता है और सबसे प्रमुख रंगों की पहचान करता है, एक रंग पैलेट तैयार करता है। यह उन डिज़ाइनरों के लिए उपयोगी है जिन्हें तस्वीरों, कलाकृतियों या ब्रांड छवियों से एक सुसंगत रंग योजना प्राप्त करने की आवश्यकता होती है। आईड्रॉपर से मैन्युअल रूप से रंग सैंपलिंग करने के बजाय, टूल स्वचालित रूप से सबसे प्रतिनिधि रंगों की पहचान करता है और उन्हें वेब-रेडी फ़ॉर्मेट (HEX, RGB, HSL) में प्रदान करता है।
मैं इस इमेज कलर एक्सट्रैक्टर टूल का उपयोग कैसे करूँ?
1. अपलोड क्षेत्र पर एक छवि ड्रैग और ड्रॉप करें (या फ़ाइलें ब्राउज़ करने के लिए क्लिक करें)। 2. टूल स्वचालित रूप से प्रमुख रंग निकालता है और उन्हें पैलेट के रूप में प्रदर्शित करता है। 3. पैलेट साइज़ स्लाइडर का उपयोग करके रंगों की संख्या समायोजित करें (2-16 रंग)। 4. किसी भी कलर स्वॉच पर क्लिक करके उसका HEX, RGB या HSL मान कॉपी करें। 5. पूरे पैलेट को CSS वेरिएबल, JSON या प्लेन टेक्स्ट के रूप में कॉपी करने के लिए एक्सपोर्ट विकल्पों का उपयोग करें।
क्या मेरा इमेज डेटा सुरक्षित है? क्या छवियाँ सर्वर पर अपलोड होती हैं?
आपकी छवियाँ 100% सुरक्षित हैं और कभी भी आपके ब्राउज़र से बाहर नहीं जातीं। सभी रंग निष्कर्षण HTML5 Canvas API का उपयोग करके क्लाइंट-साइड पर किया जाता है। टूल ब्राउज़र में सीधे आपकी छवि से पिक्सेल डेटा पढ़ता है, स्थानीय रूप से कलर क्वांटाइज़ेशन एल्गोरिदम लागू करता है और परिणाम प्रदर्शित करता है। कोई भी इमेज डेटा किसी सर्वर पर प्रसारित नहीं होता।
कौन सा कलर क्वांटाइज़ेशन एल्गोरिदम उपयोग किया जाता है?
यह टूल Median Cut एल्गोरिदम का उपयोग करता है, जो एक सुस्थापित कलर क्वांटाइज़ेशन तकनीक है। यह छवि के रंग स्थान को पुनरावर्ती रूप से छोटे क्षेत्रों में विभाजित करता है, सबसे व्यापक रेंज वाले चैनल (लाल, हरा या नीला) की मध्यिका पर विभाजित करता है। फिर प्रत्येक क्षेत्र का औसत निकालकर एक प्रतिनिधि रंग उत्पन्न किया जाता है। Median Cut तेज़, निर्धारक और दृश्य रूप से सुखद पैलेट उत्पन्न करता है।
कौन से इमेज फ़ॉर्मेट समर्थित हैं?
टूल PNG, JPEG (JPG), WebP और GIF छवियों को 10MB तक के फ़ाइल साइज़ तक समर्थन करता है। PNG, WebP और GIF छवियों में पारदर्शी पिक्सेल रंग निष्कर्षण के दौरान स्वचालित रूप से अनदेखे किए जाते हैं। GIF छवियों के लिए केवल पहले (स्थिर) फ़्रेम का विश्लेषण किया जाता है।
मैं एक छवि से कितने रंग निकाल सकता हूँ?
आप 2 से 16 रंग निकाल सकते हैं। डिफ़ॉल्ट 8 रंग है, जो अधिकांश उपयोग मामलों के लिए अच्छा संतुलन प्रदान करता है। सरल छवियों या न्यूनतम पैलेट के लिए 4-6 रंग अच्छे काम करते हैं। कई विशिष्ट रंग क्षेत्रों वाली जटिल तस्वीरों के लिए 10-16 रंग अधिक बारीकियाँ कैप्चर करेंगे।
आवृत्ति, रंग और चमक के अनुसार छाँटने में क्या अंतर है?
आवृत्ति (डिफ़ॉल्ट) रंगों को छवि में उनके क्षेत्र के अनुसार क्रमबद्ध करती है, सबसे प्रमुख रंग पहले। रंग कलर व्हील पर उनकी स्थिति (0-360 डिग्री) के अनुसार क्रमबद्ध करता है, एक इंद्रधनुष जैसा क्रम बनाता है। चमक HSL लाइटनेस मान के आधार पर सबसे हल्के से सबसे गहरे रंग तक क्रमबद्ध करती है।
क्या मैं कोड में उपयोग के लिए कलर पैलेट एक्सपोर्ट कर सकता हूँ?
हाँ। टूल डेवलपर्स के लिए अनुकूलित कई एक्सपोर्ट फ़ॉर्मेट प्रदान करता है: CSS वेरिएबल :root { --color-1: #FF5733; ... } जेनरेट करता है जो CSS के लिए तैयार है। JSON hex, rgb और hsl मानों वाले ऑब्जेक्ट एरे को प्रोग्रामेटिक उपयोग के लिए एक्सपोर्ट करता है। प्लेन टेक्स्ट प्रति पंक्ति एक HEX कोड की सरल सूची प्रदान करता है।
कोड उदाहरण
// Extract dominant colors from an image using Canvas API + Median Cut
function extractColorsFromImage(imageSource, colorCount = 8) {
return new Promise((resolve, reject) => {
const img = new Image();
img.onload = () => {
const maxPixels = 10000;
const scale = Math.min(1, Math.sqrt(maxPixels / (img.width * img.height)));
const width = Math.max(1, Math.floor(img.width * scale));
const height = Math.max(1, Math.floor(img.height * scale));
const canvas = document.createElement("canvas");
canvas.width = width;
canvas.height = height;
const ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0, width, height);
const imageData = ctx.getImageData(0, 0, width, height);
const pixels = [];
for (let i = 0; i < imageData.data.length; i += 4) {
if (imageData.data[i + 3] < 128) continue;
pixels.push({
r: imageData.data[i],
g: imageData.data[i + 1],
b: imageData.data[i + 2],
});
}
const colors = medianCut(pixels, colorCount);
resolve(colors);
};
img.onerror = () => reject(new Error("Failed to load image"));
if (imageSource instanceof File) {
img.src = URL.createObjectURL(imageSource);
} else {
img.src = imageSource;
}
});
}
function medianCut(pixels, targetCount) {
if (pixels.length === 0) return [];
let buckets = [pixels];
while (buckets.length < targetCount) {
let maxRange = -1, maxIndex = 0, splitChannel = "r";
for (let i = 0; i < buckets.length; i++) {
if (buckets[i].length < 2) continue;
for (const ch of ["r", "g", "b"]) {
const values = buckets[i].map((p) => p[ch]);
const range = Math.max(...values) - Math.min(...values);
if (range > maxRange) {
maxRange = range;
maxIndex = i;
splitChannel = ch;
}
}
}
if (maxRange <= 0) break;
const toSplit = buckets[maxIndex];
toSplit.sort((a, b) => a[splitChannel] - b[splitChannel]);
const mid = Math.floor(toSplit.length / 2);
buckets.splice(maxIndex, 1, toSplit.slice(0, mid), toSplit.slice(mid));
}
const totalPixels = pixels.length;
return buckets.map((bucket) => {
const r = Math.round(bucket.reduce((s, p) => s + p.r, 0) / bucket.length);
const g = Math.round(bucket.reduce((s, p) => s + p.g, 0) / bucket.length);
const b = Math.round(bucket.reduce((s, p) => s + p.b, 0) / bucket.length);
const hex = "#" + [r, g, b].map((v) => v.toString(16).padStart(2, "0")).join("").toUpperCase();
return { hex, rgb: { r, g, b }, percentage: ((bucket.length / totalPixels) * 100).toFixed(1) };
});
}
// Usage
const input = document.querySelector('input[type="file"]');
input.addEventListener("change", async (e) => {
const file = e.target.files[0];
const colors = await extractColorsFromImage(file, 8);
colors.forEach((c) => console.log(`${c.hex} - ${c.percentage}%`));
});