हेक्स को RGBA में बदलें


86

मेरी बेला - http://jsbin.com/pitu/1/edit

मैं rgba रूपांतरण के लिए एक आसान हेक्स की कोशिश करना चाहता था। जब मैंने ब्राउज़र का उपयोग किया है तो रंगों को आरजीबी के रूप में डिफ़ॉल्ट रूप से उपयोग किया जाता है, इसलिए फ़ार्बस्टिक रंग बीनने वाले का उपयोग करते समय मैं हेक्स मान को आरजीबी में परिवर्तित कर रहा हूं पृष्ठभूमि रंग को पकड़कर हेक्स मान उत्पन्न करता है (जैसा कि डिफ़ॉल्ट रूप से आरजीबी = साधारण रूपांतरण द्वारा आरजीबी

मैंने )प्रतीक को बदलने की कोशिश की , 1), लेकिन यह काम नहीं किया, इसलिए मैं सिर्फ यह देखने के लिए गया कि कैसे आरजीबी को आरजीबी में परिवर्तित करना काम करेगा, और मुझे अभी भी परेशानी हो रही है।

द जक्वरी

$('.torgb').val($('#color').css('background-color'));
$('.torgba').val().replace(/rgb/g,"rgba");

लक्ष्य
यहां छवि विवरण दर्ज करें

संपादित करें :

टाइनीकोलर एक बेहतरीन कलर मैनिपुलेशन js लाइब्रेरी है जो मैं यहाँ और सब कुछ चाहता हूँ। मुझे लगता है कि तुम लोग इसे एक कोशिश देना चाह सकते हो! - https://github.com/bgrins/TinyColor


1
टाइनीकोलर एक बेहतरीन कलर मैनिपुलेशन js लाइब्रेरी है जो मैं यहाँ और सब कुछ चाहता हूँ। मुझे लगता है कि तुम लोग इसे एक कोशिश देना चाह सकते हो!
माइकल श्वार्ट्ज

जवाबों:


155
//If you write your own code, remember hex color shortcuts (eg., #fff, #000)

function hexToRgbA(hex){
    var c;
    if(/^#([A-Fa-f0-9]{3}){1,2}$/.test(hex)){
        c= hex.substring(1).split('');
        if(c.length== 3){
            c= [c[0], c[0], c[1], c[1], c[2], c[2]];
        }
        c= '0x'+c.join('');
        return 'rgba('+[(c>>16)&255, (c>>8)&255, c&255].join(',')+',1)';
    }
    throw new Error('Bad Hex');
}

hexToRgbA('#fbafff')

/*  returned value: (String)
rgba(251,175,255,1)
*/

1
धन्यवाद .. चमत्कार जैसा काम किया .. :)
मनप्रीत सिंह सहोता

4
समाधान को समझना बहुत आसान है, लेकिन यह 8 फॉर्म हेक्स की तरह समर्थन नहीं करता है #ff0000aa?
सुपरसन

1
यदि इनपुट 3 या 6 वर्णों का नहीं है तो यह काम नहीं करता है।
केहलान क्रुममे

93

@ ElDoRado1239 का सही विचार है, लेकिन इसका एक साफ़ तरीका भी है:

function hexToRGB(hex, alpha) {
    var r = parseInt(hex.slice(1, 3), 16),
        g = parseInt(hex.slice(3, 5), 16),
        b = parseInt(hex.slice(5, 7), 16);

    if (alpha) {
        return "rgba(" + r + ", " + g + ", " + b + ", " + alpha + ")";
    } else {
        return "rgb(" + r + ", " + g + ", " + b + ")";
    }
}

hexToRGB('#FF0000', 0.5);


1
नोट: यह HEX शॉर्टकट, जैसे पर विफल होगा #fff। हालांकि यह आसानी से तय किया जाना चाहिए!
मैथ्यू हर्बस्ट

1
ठीक है, हाँ, आपको फंक्शन को सही इनपुट देना होगा ...
AJFarkas

बहुत पठनीय है, मुझे यह रेग एक्सप आधारित समाधान से बहुत अधिक पसंद है।
डेहरेंस

अच्छा काम!! एक छोटी सी बात मुझे हालांकि उल्लेख करना है। मुझे स्ट्रिंग में अल्पविराम और RGBA मूल्यों के बीच रिक्त स्थान रखने का कुछ बुरा अनुभव है। (उदाहरण: rgba (255, 35, 234, 0.5))। विशेष रूप से यदि आप किसी अन्य प्रोग्राम के लिए इस मान को पास करते हैं, तो इसके बारे में जागरूक रहें। क्योंकि कुछ प्रोग्राम हैं जो स्ट्रिंग में मानों के बीच रिक्त स्थान को स्वीकार नहीं करते हैं। इसलिए, उन स्थानों को अंतिम आउटपुट से हटाने के लिए बेहतर है।
थरंगा

eslintसिर्फ स्टाइल इंफोर्समेंट है। यह केवल संयोग से है कि मैंने कुछ भी नहीं लिखा है जो आपकी शैली वरीयताओं का खंडन करता है। उदाहरण के लिए, मैं इस समय जिस परियोजना पर काम कर रहा हूँ, उस पर लाइनिंग पास नहीं होगी।
एजेफर्कास

33

ES6 फ़ंक्शन '#' के साथ या उसके बिना केवल 6 वर्ण हेक्स को संभालने के लिए कार्य करता है:

const hex2rgba = (hex, alpha = 1) => {
  const [r, g, b] = hex.match(/\w\w/g).map(x => parseInt(x, 16));
  return `rgba(${r},${g},${b},${alpha})`;
};

उपयोग:

hex2rgba('#af087b', .5)   // returns: rgba(175,8,123,0.5)
hex2rgba('af087b', .5)    // returns: rgba(175,8,123,0.5)
hex2rgba('af087b')        // returns: rgba(175,8,123,1)

चूंकि toStringपर Arrayसाथ जुड़ जाता है ,और तथ्य यह है इनपुट हो सकता है rrggbbaa hexआप स्थिरांक rgb = hex.match को बदल सकते हैं (...)। टुकड़ा (0.3) .map (...) returnn` $ {rgb}, $ {अल्फा } `;
मोर्टेजा टूरानी

1
नीचे दिए गए कोड भी hex2rgba ('# 369', 0.5) में बदल देंगे; var hex2rgba = (हेक्स, अल्फा = 1) => {const [r, g, b] = hex.match (hex.length <= 4? / \ w / g: / \ w \ w / g) .map x => parseInt (x.length <2 ${x}${x};: x, 16)); वापसी rgba(${r},${g},${b},${alpha}); };
सेरकान KONAKCI

14

स्वच्छ टाइपस्क्रिप्ट संस्करण:

hexToRGB(hex: string, alpha: string) {

  const r = parseInt(hex.slice(1, 3), 16);
  const g = parseInt(hex.slice(3, 5), 16);
  const b = parseInt(hex.slice(5, 7), 16);

  if (alpha) {
    return `rgba(${r}, ${g}, ${b}, ${alpha})`;
  } else {
    return `rgba(${r}, ${g}, ${b})`;
  }
}

@ AJFarkas के उत्तर के आधार पर।


1
यह आर, जी या / और बी के लिए NaN रिटर्न वाले कुछ मामलों में हर बार काम नहीं करता है।
अक्षय

मेरे लिए काम किया! Thx
सैक्सोफोनिस्ट

10

कोई हेक्स फॉर्म मॉड्यूलर दृष्टिकोण

मुख्य चुनौती यह है कि 2018 तक HEX के कुछ रूप हैं। 6 चार पारंपरिक रूप, 3 चार लघु रूप, और एक नया 4 और 8 चार रूप जिसमें अल्फा शामिल है। निम्नलिखित फ़ंक्शन किसी भी हेक्स फॉर्म को संभाल सकता है।

const isValidHex = (hex) => /^#([A-Fa-f0-9]{3,4}){1,2}$/.test(hex)

const getChunksFromString = (st, chunkSize) => st.match(new RegExp(`.{${chunkSize}}`, "g"))

const convertHexUnitTo256 = (hexStr) => parseInt(hexStr.repeat(2 / hexStr.length), 16)

const getAlphafloat = (a, alpha) => {
    if (typeof a !== "undefined") {return a / 255}
    if ((typeof alpha != "number") || alpha <0 || alpha >1){
      return 1
    }
    return alpha
}

export const hexToRGBA = (hex, alpha) => {
    if (!isValidHex(hex)) {throw new Error("Invalid HEX")}
    const chunkSize = Math.floor((hex.length - 1) / 3)
    const hexArr = getChunksFromString(hex.slice(1), chunkSize)
    const [r, g, b, a] = hexArr.map(convertHexUnitTo256)
    return `rgba(${r}, ${g}, ${b}, ${getAlphafloat(a, alpha)})`
}

निम्नलिखित तरीकों से फ़ंक्शन को अल्फा प्रदान किया जा सकता है:

  1. 4, या 8 फॉर्म HEX के भाग के रूप में।
  2. 0-1 के बीच दूसरे पैरामीटर के रूप में,

उत्पादन

    const c1 = "#f80"
    const c2 = "#f808"
    const c3 = "#0088ff"
    const c4 = "#0088ff88"
    const c5 = "#98736"

    console.log(hexToRGBA(c1))   //  rgba(255, 136, 0, 1)
    console.log(hexToRGBA(c2))   //  rgba(255, 136, 0, 0.53125)
    console.log(hexToRGBA(c3))   //  rgba(0, 136, 255, 1)
    console.log(hexToRGBA(c4))   //  rgba(0, 136, 255, 0.53125)
    console.log(hexToRGBA(c5))   //  Uncaught Error: Invalid HEX

    console.log(hexToRGBA(c1, 0.5))   //  rgba(255, 136, 0, 0.5)
    console.log(hexToRGBA(c3, 0.5))   //  rgba(0, 136, 255, 0.5)

1
कुछ ब्राउज़र अस्पष्टता के साथ हेक्स रंगों का समर्थन करते हैं, अन्य नहीं। 8 उत्तर हेक्स को rgba, rgba में सभी ब्राउज़रों में समर्थित होने में परिवर्तित करने में यह उत्तर बहुत उपयोगी था।
जॉर्ज

1
@ जॉर्ज, धन्यवाद! इसे बनाने के बाद मैंने खुद से पूछा कि क्या वास्तव में ऐसा व्यापक दृष्टिकोण आवश्यक है। आपकी प्रतिक्रिया मूल्यवान है।
बेन कार्प

1
मुझे लगता है कि अल्फा कैल्क में 1 छोटा बग हो सकता है। मुझे लगता है कि इसे पढ़ना चाहिए: a / 255 अन्यथा एफएफ 1 नहीं लौटाता
डस्टिन केर्स्टीन

@DustinKerstein अच्छा पकड़! संभवतः नुकसान नहीं कर सकता, लेकिन फिर भी इसे ठीक किया जाना चाहिए।
बेन कार्प

1
यह सबसे अच्छा जवाब है और इसने मेरे लिए सभी यूनिट परीक्षणों के साथ काम किया।
मेनाई अला एडडिन - अलादीन

9

यदि आप हेक्स को rgba में बदलना चाहते हैं तो आप इस फ़ंक्शन का उपयोग कर सकते हैं,

function hex2rgba_convert(hex,opacity){
 hex = hex.replace('#','');
 r = parseInt(hex.substring(0, hex.length/3), 16);
 g = parseInt(hex.substring(hex.length/3, 2*hex.length/3), 16);
 b = parseInt(hex.substring(2*hex.length/3, 3*hex.length/3), 16);

 result = 'rgba('+r+','+g+','+b+','+opacity/100+')';
 return result;
}

यहाँ विवरण हेक्स टू आरजीबीए है


8

यहाँ एक फ़ंक्शन है जो यदि आप एक अल्फा प्रदान करते हैं तो आरजीबी या आरजीबीए लौटाता है। फ़ंक्शन छोटे हेक्स रंग कोड भी कनवर्ट करता है।

समारोह:

function hexToRgb(hex, alpha) {
   hex   = hex.replace('#', '');
   var r = parseInt(hex.length == 3 ? hex.slice(0, 1).repeat(2) : hex.slice(0, 2), 16);
   var g = parseInt(hex.length == 3 ? hex.slice(1, 2).repeat(2) : hex.slice(2, 4), 16);
   var b = parseInt(hex.length == 3 ? hex.slice(2, 3).repeat(2) : hex.slice(4, 6), 16);
   if ( alpha ) {
      return 'rgba(' + r + ', ' + g + ', ' + b + ', ' + alpha + ')';
   }
   else {
      return 'rgb(' + r + ', ' + g + ', ' + b + ')';
   }
}

उदाहरण:

hexToRgb('FF0000');// rgb(255, 0, 0)
hexToRgb('#FF0000');// rgb(255, 0, 0)
hexToRgb('#FF0000', 1);// rgba(255, 0, 0, 1)
hexToRgb('F00');// rgb(255, 0, 0)
hexToRgb('#F00');// rgb(255, 0, 0)
hexToRgb('#F00', 1);// rgba(255, 0, 0, 1)

6

ES6 आधुनिक, RegEx मुक्त, त्रुटि की जाँच और निरंतर तीर फ़ंक्शन के साथ समाधान, जो त्रुटियों के लिए अशक्त देता है। यदि अल्फा नहीं दिया गया है, तो एक का डिफ़ॉल्ट मान उपयोग किया जाता है:

const hexToRGB = (hex, alpha = 1) => {
    let parseString = hex;
    if (hex.startsWith('#')) {parseString = hex.slice(1, 7);}
    if (parseString.length !== 6) {return null;}
    const r = parseInt(parseString.slice(0, 2), 16);
    const g = parseInt(parseString.slice(2, 4), 16);
    const b = parseInt(parseString.slice(4, 6), 16);
    if (isNaN(r) || isNaN(g) || isNaN(b)) {return null;}
    return `rgba(${r}, ${g}, ${b}, ${alpha})`;
};

नोट: यह nullत्रुटियों के लिए देता है। आप {return null;}फेंक बयान के साथ बदल सकते हैं : {throw "Not a valid hex color!";}लेकिन तब आपको इसे भीतर से कॉल करना चाहिए try-catch:

hexToRGB("#3454r5") => null
hexToRGB("#345465") => rgba(52, 84, 101, 1)
hexToRGB("#345465", 0.5) => rgba(52, 84, 101, 0.5)

5

शुद्ध जेएस समाधान अगर यह मदद करता है:

function hexToRGB(hex,alphaYes){
 var h = "0123456789ABCDEF";
 var r = h.indexOf(hex[1])*16+h.indexOf(hex[2]);
 var g = h.indexOf(hex[3])*16+h.indexOf(hex[4]);
 var b = h.indexOf(hex[5])*16+h.indexOf(hex[6]);
 if(alphaYes) return "rgba("+r+", "+g+", "+b+", 1)";
 else return "rgb("+r+", "+g+", "+b+")";
}

"अल्फ़ाज़" "सत्य" या "असत्य" है, इस पर निर्भर करता है कि आप अल्फ़ा चाहते हैं या नहीं।

पूर्वावलोकन


elseकीवर्ड इस मामले में अनावश्यक है। यह परवाह किए बिना गैर-अल्फा वापस कर देगा।
एंडी

ओह, हाँ, लेकिन यह मुझे अधिक "साफ" लगता है। बस व्यक्तिगत पसंद की बात है जो मुझे लगता है।
ElDoRado1239 14

यह कोड लोअरकेस हेक्स (जैसे। #f0a16e) के साथ काम नहीं करता है । मैं कन्वर्ट करने के लिए सुझाव है कि hexके साथ toUpperCaseपहले।
फिलिप्पे_ब

3

मुझे @AJFarkas उत्तर पसंद आया और शॉर्टकट हेक्स (#fff) के लिए समर्थन जोड़ना

function hexToRGB(hex, alpha) {
    if (!hex || [4, 7].indexOf(hex.length) === -1) {
        return; // throw new Error('Bad Hex');
    }

    hex = hex.substr(1);
    // if shortcuts (#F00) -> set to normal (#FF0000)
    if (hex.length === 3) { 
        hex = hex.split('').map(function(el){ 
              return el + el + '';
            }).join('');
    }

    var r = parseInt(hex.slice(0, 2), 16),
        g = parseInt(hex.slice(2, 4), 16),
        b = parseInt(hex.slice(4, 6), 16);

    if (alpha !== undefined) {
        return "rgba(" + r + ", " + g + ", " + b + ", " + alpha + ")";
    } else {
        return "rgb(" + r + ", " + g + ", " + b + ")";
    }
}

document.write(hexToRGB('#FF0000', 0.5));
document.write('<br>');
document.write(hexToRGB('#F00', 0.4));


3

यहाँ एक ES2015 + संस्करण है जो थोड़ा अधिक रक्षात्मक है और शॉर्टहैंड 3-अंक सिंटैक्स को संभालता है।

/*
 * Takes a 3 or 6-digit hex color code, and an optional 0-255 numeric alpha value
 */
function hexToRGB(hex, alpha) {
  if (typeof hex !== 'string' || hex[0] !== '#') return null; // or return 'transparent'

  const stringValues = (hex.length === 4)
        ? [hex.slice(1, 2), hex.slice(2, 3), hex.slice(3, 4)].map(n => `${n}${n}`)
        : [hex.slice(1, 3), hex.slice(3, 5), hex.slice(5, 7)];
  const intValues = stringValues.map(n => parseInt(n, 16));

  return (typeof alpha === 'number')
    ? `rgba(${intValues.join(', ')}, ${alpha})`
    : `rgb(${intValues.join(', ')})`;
}

1

और बिट शिफ्टिंग के आधार पर एक और।

// hex can be a string in the format of "fc9a04", "0xfc9a04" or "#fc90a4" (uppercase digits are allowed) or the equivalent number
// alpha should be 0-1
const hex2rgb = (hex, alpha) => {
  const c = typeof(hex) === 'string' ? parseInt(hex.replace('#', ''), 16)  : hex;
  return `rgb(${c >> 16}, ${(c & 0xff00) >> 8}, ${c & 0xff}, ${alpha})`;
};

1

प्रयत्न

// hex - str e.g. "#abcdef"; a - alpha range 0-1; result e.g. "rgba(1,1,1,0)"
let hex2rgba= (hex,a)=> `rgb(${hex.substr(1).match(/../g).map(x=>+`0x${x}`)},${a})`


0

बदलना HEX को अल्फा (ahex) के साथ rgba में बदलें।

function ahex_to_rba(ahex) {
    //clean #
    ahex = ahex.substring(1, ahex.length);
    ahex = ahex.split('');

    var r = ahex[0] + ahex[0],
        g = ahex[1] + ahex[1],
        b = ahex[2] + ahex[2],
        a = ahex[3] + ahex[3];

    if (ahex.length >= 6) {
        r = ahex[0] + ahex[1];
        g = ahex[2] + ahex[3];
        b = ahex[4] + ahex[5];
        a = ahex[6] + (ahex[7] ? ahex[7] : ahex[6]);
    }

    var int_r = parseInt(r, 16),
        int_g = parseInt(g, 16),
        int_b = parseInt(b, 16),
        int_a = parseInt(a, 16);


    int_a = int_a / 255;

    if (int_a < 1 && int_a > 0) int_a = int_a.toFixed(2);

    if (int_a || int_a === 0)
        return 'rgba('+int_r+', '+int_g+', '+int_b+', '+int_a+')';
    return 'rgb('+int_r+', '+int_g+', '+int_b+')';
}

स्निपेट के साथ इसे स्वयं आज़माएँ:

मूल लेखक


0

@ ElDoRado1239 में जोड़ना

उन लोगों के लिए जो अल्फा वैल्यू (टाइपस्क्रिप्ट स्निपेट) पास करना चाहते हैं:

static hexToRGB(hex: string, alpha: number): string {
    var h = "0123456789ABCDEF";
    var r = h.indexOf(hex[1]) * 16 + h.indexOf(hex[2]);
    var g = h.indexOf(hex[3]) * 16 + h.indexOf(hex[4]);
    var b = h.indexOf(hex[5]) * 16 + h.indexOf(hex[6]);
    if (alpha) {
      return `rgba(${r}, ${g}, ${b}, ${alpha})`
    }

    return `rgba(${r}, ${g}, ${b})`;
  }


-9

इसे इस्तेमाल करे

<div class="torgb" onclick="rgba();" style="background-color:#000; width:20px; height:20px;"></div>
<script>
function rgba(){
$('.torgb').attr('background-color','rgba(0,0,0,1)');
$('.torgb').attr('onclick','hex();');
}
function hex(){
$('.torgb').attr('background-color','#000');
$('.torgb').attr('onclick','rgba();');
}
</script>

कार्य hexऔर rgbaकार्य कहां से आ रहे हैं?
एंडी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.