Come modificare lo sfondo di un'immagine con pixel trasparenti?
-
05-07-2019 - |
Domanda
È noto il colore esatto dello sfondo.
Immagina un carattere anti-alias su uno sfondo verde. Ora vogliamo cambiare il colore di sfondo dell'immagine in rosso.
Quindi ... Come posso estrarre il "non sfondo"? parte del colore dal pixel e aggiungerlo (o "fondere") sopra un altro colore bg in seguito?
Conosciamo anche il colore del carattere, quindi sappiamo quali pixel sono completamente opachi.
Soluzione
Ogni pixel nell'immagine è il colore di sfondo, il colore del carattere o una combinazione dei due. Quindi è possibile specificare l'intera immagine con i valori RGB di sfondo, i valori RGB dei caratteri e una matrice di valori tra 0 e 1, dove, diciamo, 0 indica che il pixel è il colore di sfondo, 1 indica che il pixel è il colore del carattere. Un valore come 0,1 indica che il pixel è principalmente di colore di sfondo con un po 'di colore del carattere, ecc.
Un'espressione come:
blend_value = ((pixel.R - bg.R) / (font.R - bg.R)
+ (pixel.G - bg.G) / (font.G - bg.G)
+ (pixel.B - bg.B) / (font.B - bg.B)) / 3
ti darà questi valori per qualsiasi pixel nell'immagine. Per costruire i nuovi valori RGB utilizzando un nuovo colore di sfondo, utilizzare questo valore per fondere il colore del carattere con il nuovo colore di sfondo.
new_pixel.R = blend_value * font.R + (1 - blend_value) * new_bg.R
new_pixel.G = blend_value * font.G + (1 - blend_value) * new_bg.G
new_pixel.B = blend_value * font.B + (1 - blend_value) * new_bg.B