Invertovanie farieb v PHP

mam taky problem. ak mam kod farby napr. #FF00FF a potrebujem k nej vytvorit opacnu hodnotu, nijako mi to nechce ist... mal som jeden napad cez str_replace, ale to nefunguje... ma niekto ine risenie?
Je to jen teorie, nevím jak se invertují barvy, ale napadlo mě, když jsou to hexa hodnoty, co takhle odečíst je každou od FF a výsledek použít? Jestli kecám, sorry.
nie, musi sa vytvorit uplny opak kazdeho hex znaku farby osobitne. viz. tabulka:
0 > F
1 > E
2 > D
3 > C
4 > B
5 > A
6 > 9
7 > 8
8 > 7
9 > 6
A > 5
B > 4
C > 3
D > 2
E > 1
F > 0

skusal som to cez str_replace anhradit ti znaky podla tej tabulky, ale ak je napr. v kode F tak sa to zmeni na 0 a hned potom sa to zmeni druhym prihazom naspet na F...
to mě nenapadlo
naházej ty znaky do proměnných a na každý to použij zvlášť
pak je zase spoj
(ale to je trochu delší)
http://www.webzdarma.cz/forum/read.php?f=2&i=29413&t=29408
hovorim ti ze str_replace som skusal, ale nemoze to fungovat! vysvetlim ti preco:

$cislo = "#12340F";
$new = str_replace("0","F",$cislo); // je 1234FF, ma byt 123FF - ok
$new = str_replace("1","E",$new); // je E234FF, ma byt E234FF - ok
$new = str_replcae("2","D",$new); // je ED34FF, ma byt ED34FF - ok
$new = str_replcae("3","C",$new); // je EDC4FF, ma byt EDC4FF - ok
$new = str_replcae("4","B",$new); // je EDCBFF, ma byt EDCBFF - ok
$new = str_replcae("5","A",$new); // ok
$new = str_replcae("6","9",$new); // ok
$new = str_replcae("7","8",$new); // ok
$new = str_replcae("8","7",$new); // ok
$new = str_replcae("9","6",$new); // ok
$new = str_replcae("A","5",$new); // ok
$new = str_replcae("B","4",$new); // ok
$new = str_replcae("C","3",$new); // ok
$new = str_replcae("D","2",$new); // ok
$new = str_replcae("E","1",$new); // ok
$new = str_replcae("F","0",$new); // je EDCB0F, ma byt EDCBF0 - ! udaje s a znova zmenia... najprv sa zmenilo 0 na F a teraz sa to iste F zmenilo naspet na 0... dufam ze uz chapes moj problem(dufam, ze aj ostatny)... aj keby som tam dal len jeden str_replace a parametrom 1 a 2 by boli polia, tak sa to sprava rovnako...
<?php
$puvodni="123456";
for($i=1;$i++;$i=6);
{
$pole[$i]=substr($puvodni,$i-1,1);
switch ($pole[$i]) {
case "0" : $pole[$i]=F; break;
case "1" : $pole[$i]=E; break;
case "2" : $pole[$i]=D; break;
case "3" : $pole[$i]=C; break;
case "4" : $pole[$i]=B; break;
case "5" : $pole[$i]=A; break;
case "6" : $pole[$i]=9; break;
case "7" : $pole[$i]=8; break;
case "8" : $pole[$i]=7; break;
case "9" : $pole[$i]=6; break;
case "A" : $pole[$i]=5; break;
case "B" : $pole[$i]=4; break;
case "C" : $pole[$i]=3; break;
case "D" : $pole[$i]=2; break;
case "E" : $pole[$i]=1; break;
case "F" : $pole[$i]=0; break;
};
$konecna=$pole[1].$pole[2].$pole[3].$pole[4].$pole[5].$pole[6];
echo $konecna;
?>

víte někdo proč to nejde?
viz. moju predchadzajucu spravu...
použil jsem něco jiného, jestli sis všiml
prakticky je to myslim na rovnakom principe...
nee, každý znak se testuje zvlášť a jednou
to substr tam ani netreba davat... stacilo by namiesto toho dat $puvodni[$i]
:) nojo
$puvodni="123456";
$konecna=strtr($puvodni,"123456789ABCDEF","FEDCBA987654321");
echo $konecna;

:D
jeee... ze ma to nenapadlo! tearz mi este pls pomozte s tou mojou dasou temou (ako zistit tu velkost html kodu :)
delate to moc slozite. Jeste jste nikdy neslyseli o operatoru XOR ?
slyšeli, ale číslicovka mi nikdy moc nešla, to se strtr mi přijde dostačující
No, #FF00FF; je zapis kde se barva sklada ze tri slozek a sice
cervene
zelene
modre
oboji v intervalu 00-FF
inverzi dosahnes tak, ze otocis hodnoty jednotlivych slozek. Treba:
$barva = "#FF00FF";
$match = array();
preg_match('/#([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})/', $barva, $match);
$r = "0x".$match[1];
$g = "0x".$match[2];
$b = "0x".$match[3];

$ir = str_pad(dechex(0xFF - $r), 2, '0', STR_PAD_LEFT);
$ig = str_pad(dechex(0xFF - $g), 2, '0', STR_PAD_LEFT);
$ib = str_pad(dechex(0xFF - $b), 2, '0', STR_PAD_LEFT);

$inverze = strtoupper("#".$ir.$ig.$ib);
echo "puvodni $barva<br/>\n";
echo "inverzni $inverze<br/>\n";

--
mozna vymyslite neco elegantnejsiho.
mzm >> ten sposb od daneela funguje a je to kratsie ;)
a kupodivu to funguje i tim strtr(); :-)