sábado, 19 de novembro de 2016

PHP Color Mixer - Gera cor intermediária entre duas cores

Olááá Geekers!!! Boa noite né rsrsrs

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. 😉