Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Konwersja "nazwanego koloru" na kolor rgb.
Forum PHP.pl > Forum > Przedszkole
klapaucius
Mam mniej więcej taki formularz z wyborem koloru:
  1. <select size='1' name='kolor'>
  2. <option value='wybierz'>-Wybierz-</option>
  3. <option value='black'>Czarny</option>
  4. <option value='green'>Zielony</option>
  5. <option value='gray'>Szary</option>
  6. <option value='red'>Czerwony</option>
  7. <option value='yellow'>Żółty</option>
  8. <option value='blue'>Niebieski</option>
  9. <option value='violet'>Fioletowy</option>
  10. <option value='white'>Biały</option>
  11. </select>


I jak widzimy przy każdym kolorze jest jakaś wartość (black, green itd).

Jak jednak wykorzystać dane z tego formularza przy wywołaniu przykładowej funkcji imagecolorallocate($obrazek, 255, 255, 255);? Jak widzimy, należy w niej użyć koloru w formacie RGB.
Czy jedynym sposobem jest napisanie kodu za pomoca instrukcji warunkowych, coś w stylu:
  1. if($_POST['kolor'] == 'black'){
  2. $r = 0;
  3. $g = 0
  4. $b = 0;
  5. }
  6. if($_POST['kolor'] == 'green'){
  7. $r = 53; //oczywiscie sa to przykladowe liczby
  8. $g = 76;
  9. $b = 42;
  10. }
  11. imagecolorallocate($obrazek, $r, $g, $b)

Czy może jest jakiś prostszy, bardziej optymalny sposób?
P.S.
Wszystkim wesołych świąt życzę smile.gif
ciekawskiii
ja bym zrobil tak, w value 1,2 itd.
  1. $tablica=array(1=>'0,0,0', 2=>'255,255,255');

i wtedy nie dajesz tylu warunkow tylko odrazu masz gotowe kolory w $tablica[1] $tablica[2] itd.
klapaucius
ale wtedy musiałbym użyć tej tablicy w taki sposób?:
  1. $tablica=array(1=>'0,0,0');
  2. imagecolorallocate($obrazek, $tablica[1]);

Ale tak jest chyba nieprawidłowo....
Crozin
Nie ma innej metody niż zdefiniowanie listy kolorów i odpowiadających im wartościom RGB. Nie wiem też czemu przejmujesz się optymalnością przy kodzie mającym ustawić wartości trzech zmiennych, który na 100% nie będzie wąskim gardłem aplikacji.
  1. function colorToRGB($color) {
  2. switch ($color) {
  3. case 'red': return array(255, 0, 0);
  4. case 'blue': return array(0, 0, 255);
  5. case 'yellow': return array(123, 12, 31);
  6. }
  7.  
  8. // czy tam w formie tablicy dwuwymiarowej... bez znaczenia
  9.  
  10. throw new InvalidArgumentException('Invalid color name');
  11. }
  12.  
  13. list($r, $g, $b) = colorToRGB('red');
klapaucius
ok. zrobiłem tak jak napisałeś i wszystko działa. Dziękuję !
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.