PHP Color Mixer - Gera cor intermediária entre duas cores
Olááá Geekers!!! Boa noite né rsrsrs
Para chamar a função você deve passar a cor em hexadecimal e a função retorna o hexadecimal sem a tralha ou jogo da velha (#), segue o código...
echo $this->colorMixer("000000", "DAA520"); // Cor 1 = Preto, Cor 2 = Amarelo
O resultado fica assim:
Espero que tenham gostado, qualquer dúvida deixem nos comentários. 😉
Programador é assim, no caso programadora, mas enfim, quando você precisa de um código e não encontra exatamente como quer, aí pesquisamos até conseguir uma solução. 😊
Tudo começou quando eu queria fazer um efeito de degradê com CSS, e aí procurei, e procurei, e procurei, e nem sei mais onde que achei, mas foi em mais de um fórum rsrsrs. Então pra fazer o efeito eu precisava de 2 cores, uma cor qualquer e a outra mais escura pra dar o efeito de sombra (imagem abaixo).
Então criei essa função em PHP que gera uma cor intermediária entre duas cores quaisquer em hexadecimal, no caso utilizei a cor base (amarelo, azul, vermelho) e a cor preta, e a função gera a cor intermediária que dá essa cor da sombra na parte inferior da bola.
Vamos ao código em PHP... (Só não consegui utilizar a tag code 😔)
/**
* Gera cor intermediária entre duas cores em hexadecimal
* @param hexadecimal $cor1 (sem #)
* @param hexadecimal $cor2 (sem #)
* @return $color cor em hexadecimal sem #
* @author Danielle Beatriz (danibetriz@hotmail.com)
* @since 17/11/2016
*/
public function colorMixer($cor1, $cor2) {
// Remove a tralha (#) caso haja
$cor1 = str_replace("#", "", $cor1);
$cor2 = str_replace("#", "", $cor2);
// Verifica se a cor é hexadecimal
ctype_xdigit($cor1) ? $hex1 = true : $hex1 = false;
ctype_xdigit($cor2) ? $hex2 = true : $hex2 = false;
// Se as duas cores forem hexadecimais
if ($hex1 === true && $hex2 === true) {
/* Cor 1 e Cor 2 - Separa a cor em hexadecimal de XXXXXX para XX-XX-XX e gerar o RGB - Transforma o hexadecimal em decimal e divide por dois - Arredonda o valor decimal */
$r1 = round(hexdec(substr($cor1, 0, 2)) / 2);
$g1 = round(hexdec(substr($cor1, 2, -2)) / 2);
$b1 = round(hexdec(substr($cor1, 4)) / 2);
$r2 = round(hexdec(substr($cor2, 0, 2)) / 2);
$g2 = round(hexdec(substr($cor2, 2, -2)) / 2);
$b2 = round(hexdec(substr($cor2, 4)) / 2);
// Soma as duas metades das cores selecionados para gerar a cor intermediária em RGB
$r = $r1 + $r2;
$g = $g1 + $g2;
$b = $b1 + $b2;
//Imprime a cor em rgb, caso queira retornar em RGB só mudar o retorno //echo $r . '-' . $g . '-' . $b;
/* Verifica se a soma não é maior que 255 (máximo no RGB) - Transforma o valor decimal para hexadecimal - Acrescenta um zero a esquerda para ficar no formato XX */
$color = str_pad(dechex(($r > 255 ? 255 : $r)), 2, '0', STR_PAD_LEFT) .
str_pad(dechex(($g > 255 ? 255 : $g)), 2, '0', STR_PAD_LEFT) .
str_pad(dechex(($b > 255 ? 255 : $b)), 2, '0', STR_PAD_LEFT);
// Retorna a cor intermediária
return $color;
}
}
Para chamar a função você deve passar a cor em hexadecimal e a função retorna o hexadecimal sem a tralha ou jogo da velha (#), segue o código...
echo $this->colorMixer("000000", "DAA520"); // Cor 1 = Preto, Cor 2 = Amarelo
O resultado fica assim:
Espero que tenham gostado, qualquer dúvida deixem nos comentários. 😉
Comentários
Postar um comentário