Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: hex värivaihto A->B

abina [06.02.2006 16:07:14]

#

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?

Lebe80 [06.02.2006 16:54:14]

#

Pasteepas taas sitten vastauksen saatuasi sieltä Mureakuhasta vastaus tännekin, jos jollain muullakin on sama ongelma.

abina [07.02.2006 13:44:09]

#

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);

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta