Heips!
nyt pitäisi minun saada muutettua hex värejä. Eli minulla on kaksi hex väriä. jotka voi olla ihan mitä käyttäjät määrittää. esim. #FFFFFF ja #0000FF.
Tarkoitus olisi saada määritettyä väri joka on vaikka puolesta välistä tuota värivaihtoa. tai esim. 80% tuosta väriväliltä.
Tein tämän niin että muutin nuo RGB luvuiksi. sitten jaan jokaisen 100 ja kerroin esim. 80. tämän jälkeen muutin RGB värin hex väreiksi. mutta tämä ei kuitenkaan tehnyt oikein. Koska väri saattoi olla ihan jotain muuta kuin noiden kahden väliltä. Koodi on kyllä aikamoista purkkaa mutta huomaatte idean.
Tässä tämänhetkinen koodi:
$minvari = 'FFFFFF'; $maxvari = '0000FF'; $vastaustenmaara = 100; $vastaukset = 80; $minvari = array( 'r' => hexdec(substr($minvari, 0, 2)), 'g' => hexdec(substr($minvari, 2, 2)), 'b' => hexdec(substr($minvari, 4, 2)) ); $maxvari = array( 'r' => hexdec(substr($maxvari, 0, 2)), 'g' => hexdec(substr($maxvari, 2, 2)), 'b' => hexdec(substr($maxvari, 4, 2)) ); //muutetaan punainen väri oikean sävyiseksi if($maxvari['r'] == $minvari['r']){ $finalvari['r'] == $maxvari['r']; }elseif($maxvari['r'] < $minvari['r']){ $vali = ""; $vali = $minvari['r'] - $maxvari['r']; $vali = $vali / $vastaustenmaara; $vali = $vali * ($vastaustenmaara - $vastaukset); $finalvari['r'] = $vali + $maxvari['r']; $finalvari['b'] = str_pad(dechex($finalvari['r']), 2, '0', STR_PAD_LEFT); }elseif($maxvari['r'] > $minvari['r']){ $vali = ""; $vali = $maxvari['r'] - $minvari['r']; $vali = $vali / $vastaustenmaara; $vali = $vali * ($vastaustenmaara - $vastaukset); $finalvari['r'] = $maxvari['r'] - $vali; $finalvari['b'] = str_pad(dechex($finalvari['r']), 2, '0', STR_PAD_LEFT); } //lasketaan vihreä väri if($maxvari['g'] == $minvari['g']){ $finalvari['g'] == $maxvari['g']; }elseif($maxvari['g'] < $minvari['g']){ $vali = ""; $vali = $minvari['g'] - $maxvari['g']; $vali = $vali / $vastaustenmaara; $vali = $vali * ($vastaustenmaara - $vastaukset); $finalvari['g'] = $vali + $maxvari['g']; $finalvari['g'] = str_pad(dechex($finalvari['g']), 2, '0', STR_PAD_LEFT); }elseif($maxvari['g'] > $minvari['g']){ $vali = ""; $vali = $maxvari['g'] - $minvari['g']; $vali = $vali / $vastaustenmaara; $vali = $vali * ($vastaustenmaara - vastaukset); $finalvari['g'] = $maxvari['g'] - $vali; $finalvari['g'] = str_pad(dechex($finalvari['g']), 2, '0', STR_PAD_LEFT); } //lasketaan sininen väri if($maxvari['b'] == $minvari['b']){ $finalvari['b'] == $maxvari['b']; }elseif($maxvari['b'] < $minvari['b']){ $vali = ""; $vali = $minvari['b'] - $maxvari['b']; $vali = $vali / $vastaustenmaara; $vali = $vali * ($vastaustenmaara - $vastaukset); $finalvari['b'] = $vali + $maxvari['b']; $finalvari['b'] = str_pad(dechex($finalvari['b']), 2, '0', STR_PAD_LEFT); }elseif($maxvari['b'] > $minvari['b']){ $vali = ""; $vali = $maxvari['b'] - $minvari['b']; $vali = $vali / $vastaustenmaara; $vali = $vali * ($vastaustenmaara - $vastaukset); $finalvari['b'] = $maxvari['r'] - $vali; $finalvari['b'] = str_pad(dechex($finalvari['b']), 2, '0', STR_PAD_LEFT); }
mitä olen unohtanut ottaa huomioon? Tämä lähinnä on käytössä eräänlaisessa SVG-karttasivustossa. tietokannasta tulee tuo vastaukset ja vastaustenmäärä.
hulluks tulen kohta. ideoita kuinka saada tuo laskemaan oikein tuo väri?
Pasteepas taas sitten vastauksen saatuasi sieltä Mureakuhasta vastaus tännekin, jos jollain muullakin on sama ongelma.
Jep! mureakuhasta löytyi vastaus. Eli näin:
function MidColor($ColorA, $ColorB, $Relation) { $a = hexdec($ColorA); $b = hexdec($ColorB); $r = ((($a & 0xFF0000) * $Relation + ($b & 0xFF0000) * (1 - $Relation)) & 0xFF0000) + ((($a & 0xFF00) * $Relation + ($b & 0xFF00) * (1 - $Relation)) & 0xFF00) + ((($a & 0xFF) * $Relation + ($b & 0xFF) * (1 - $Relation)) & 0xFF); return substr('00000'.dechex($r),-6); } //esimerkiksi echo MidColor('FF8800','111111',0.8);
Aihe on jo aika vanha, joten et voi enää vastata siihen.