2013-04-09 12 views
18

Mi chiedo se è disponibile uno strumento per convertire rgba in hex, che può tradurre il colore rgba visibile inclusa la trasparenza in un valore esadecimale.Come convertire rgba in un esadecimale con correzione della trasparenza?

Dire che ho questo:

rgba(0,129,255,.4) 

Che è una sorta di "luce blu" ...

Vorrei sapere se c'è un modo per ottenere la stessa luce blu "visibile "Colore in hex, quindi non voglio che lo #0081ff convertito sia qualcosa di simile al colore visibile sullo schermo.

Domanda:
Come convertire RGBA a una trasparenza aggiustato-esadecimale?

+0

Hai provato a utilizzare quella percentuale alfa per modificare il resto dei valori? Suppongo che tu voglia questo con il valore rgba su uno sfondo bianco, quindi usa la percentuale per pareggiare con un valore "più bianco". Esempio: 0,129,255, .4 == 102, 231, 255 ??? Solo un'ipotesi – jakobhans

risposta

37

Dipende dallo sfondo a cui verrà applicato il colore trasparente. Ma se si conosce il colore dello sfondo (ad esempio bianco), è possibile calcolare il colore RGB risultante dal colore RGBA applicato allo sfondo specifico.

'solo la media ponderata tra il colore e lo sfondo, il peso essendo il canale alfa (da 0 a 1):

Color = Color * alpha + Bkg * (1 - alpha); 

Per trasparente luce blu rgba(0,129,255,.4) contro bianco rgb(255,255,255):

Red = 0 * 0.4 + 255 * 0.6 = 153 
Green = 129 * 0.4 + 255 * 0.6 = 204.6 
Blue = 255 * 0.4 + 255 * 0.6 = 255 

che dà rgb(153,205,255) o #99CDFF

+0

sì è bianco. Quindi vediamo come funziona :-) – frequent

+0

perfetto! Molte grazie! – frequent

+0

Grazie per questo - Davvero aiuta un sacco! –

3

function hexify(color) { 
 
    var values = color 
 
    .replace(/rgba?\(/, '') 
 
    .replace(/\)/, '') 
 
    .replace(/[\s+]/g, '') 
 
    .split(','); 
 
    var a = parseFloat(values[3] || 1), 
 
     r = Math.floor(a * parseInt(values[0]) + (1 - a) * 255), 
 
     g = Math.floor(a * parseInt(values[1]) + (1 - a) * 255), 
 
     b = Math.floor(a * parseInt(values[2]) + (1 - a) * 255); 
 
    return "#" + 
 
    ("0" + r.toString(16)).slice(-2) + 
 
    ("0" + g.toString(16)).slice(-2) + 
 
    ("0" + b.toString(16)).slice(-2); 
 
} 
 

 
var myHex = hexify('rgba(57,156,29,0.05)'); // "#f5faf3" 
 

 
console.log(myHex);

Problemi correlati