Invertovanie farieb v PHP
20 příspěvků
Archiv diskusního fóra
Fórum je uzavřené a slouží pouze ke čtení. Některé informace mohou být zastaralé.
-
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(); :-)