Formula per scoprire il risultato di un colore dopo aver applicato x% di opacità su di esso?


10

Ho 2 colori

  1. #a1a2a4
  2. nero ( #000000)
  3. bianco ( #ffffff)

Ora ho bisogno di sapere quanta opacità (in percentuale) devo applicare al secondo colore (nero) su uno sfondo del terzo colore (bianco) per ottenere un colore "più vicino" (come determinato dall'occhio) al primo color ( #a1a2a4).

Come faccio a farlo?



Sono un po 'confuso dalla tua formulazione: vuoi uno grayche sia il più vicino nel tono al colore specificato, giusto?
horatio,

Risposte:


6

Questo caso è più o meno semplice (hai a che fare con il bianco e nero).

Dopo aver applicato il colore (# a1a2a4), controlla i livelli RGB:

Livelli RGB

Puoi vedere che ha circa 162 (in media) e sapendo che può andare da 0 a 255, devi solo scoprire la percentuale:

162 * 100/255 = ~ 63,5%

Ora, poiché RGB funziona in modo opposto rispetto a CMYK (in termini di miscelazione dei colori, ovvero la combinazione di colori completa significa bianco e con la combinazione di colori CMYK significa nero), la percentuale effettiva in questo caso è la differenza tra il 100% e il valore che abbiamo ottenuto:

100 - 63,5 = 36,5%

Quindi, se applichi il 36% di opacità, avrà questo colore, l'ho appena testato.

Ovviamente in casi con colori più complessi, questo metodo non funziona e non so come ottenere la percentuale, farei la classica prova ed errore.


4

La domanda, se ho capito bene, è "Come lo calcoleresti a livello di codice?" È semplice matematica convertire il "colore" target in un valore alfa.

Bianco == [1,1,1] o #ffffff o 255.255.255, a seconda dell'applicazione. Nero == [0,0,0], ecc.

Quindi: normalizza il valore target (in questo caso, è .6314), sottrai da 1 e applica al livello nero come valore alfa. Potresti farlo un canale alla volta e fare una media dei risultati, ma perché preoccuparsi, poiché il tuo colore è indistinguibile (alla vista) da un grigio neutro # a1a1a1. (Le cose diventano più complesse se c'è una tonalità visibile, poiché i canali avranno quindi valori diversi, ma si applica lo stesso principio.)


Questo è un geek davvero sexy proprio lì. 8)
Lauren-Clear-Monica-Ipsum,

3
Perché grazie! <regola la protezione tascabile, si assicura che le penne siano equidistanti>
Alan Gilbertson

0

Una variante leggermente più veloce di tentativi ed errori:

Crea il tuo colore esadecimale in Photoshop in un documento CMYK e osserva i valori CMYK. Ricevo il 39/32/31/1.

Crea due livelli, il nero in alto e il bianco in basso.

Apri la finestra Informazioni. Separatamente, apri la finestra Livelli.

Gioca con l'opacità del livello nero. Usa il contagocce sul tuo colore e controlla nella finestra informativa per vedere quanto ti avvicini. Questo per lo più consente di risparmiare il tempo di cambio opacità - appiattire - controllare il colore - annullare appiattire.


Hai ragione, ma c'è un modo molto più geniale di farlo. 8-D
Alan Gilbertson,

0

Dati i colori di primo piano e di sfondo (valori uniformi tra i canali R, G e B), non è possibile ottenere un colore non uniforme #a1a2a4modificando l'opacità poiché l'opacità influisce su tutti i canali contemporaneamente. Tuttavia, puoi ottenere un colore "abbastanza vicino" #a1a1a1impostando l'opacità del nero su 0.37. Ecco lo strumento che ho usato:

http://colorizer.org/

  1. Fai clic su "Sfondo" e imposta il valore esadecimale su #fff
  2. Fai clic su "Pulsante" e imposta il valore esadecimale su #000
  3. Utilizzare un'utilità contagocce per trovare il colore target sullo spettro "Alfa / Opacità", quindi fare clic sullo spettro per ottenere il valore di opacità.

0

Trovare questa formula è un grande esercizio di algebra lineare. Usando RGB e l'algebra lineare ho creato questa matrice M. Se vuoi combinare RGBred = (237,32,36) e RGBblue = (60,84,165) dove il livello inferiore è al 100% di opacità e il livello superiore al 50% l'opacità quindi moltiplica Mv dove M è la matrice sottostante e v = (237,32,36,60,84,165). Otteniamo Mv = (157.777,71.444.107.444).

Il valore effettivo è (159,71,103), quindi siamo abbastanza vicini ma c'è qualche errore, probabilmente perché stavo usando i valori arrotondati per calcolare M e / o perché forse non usa RGB ma qualche altra scala per calcolare la trasparenza appiattimento. Probabilmente avrei potuto ottenere una matrice più accurata usando un approccio di tipo minimi quadrati ma ero troppo pigro.

La matrice che MI ha è

M=[-0.316438695251802233798084520470 -0.0205011495462359668020633451463 -0.627769626184202308338411657855 
    4.83088877248122926488562947487 -0.673109830626855247075257552051 0.137681159420289855072463768116]
[2.67597831835520455938498494132 0.215715090307662822540065922133 1.69848459052630338054958974280 -13.9750196437925615505500261925 
    3.20021608171817705605028810915 -0.370471014492753623188405797101]
[-6.62632375526968419148486246260 0.509833585674322977062528534400 -3.14436345482363613544439381045 35.0629474419416797625283743688
    -6.69242186135847738781211803779 1.41304347826086956521739130435]
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.