Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Zamiana liczby na kolor, Formatowanie warunkowe ala Excel
TomASS
post
Post #1





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

Ostrzeżenie: (0%)
-----


Witajcie,

Potrzebuję zrobić funkcję:

  1. function getColor($min, $max, $value){
  2. ....
  3. }


która to zwróci mi kolor (do użycia w CSS) ze "skali" od czerwonego (dla wartości mniejszej/równej $min), przez żółty (dla wartości środkowej) aż do zielonego (dla wartości większej/równej $max).

coś na wzór:
(IMG:http://i.stack.imgur.com/uErDJ.png)

Czy ktoś wie jak uzyskać kolor z tej skali w sposób "ciągły"?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
SmokAnalog
post
Post #2





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Ten problem to czysta matematyka. Możesz poszukać gotowej funkcji, a jeśli masz ochotę zrobić swoją, to masz pole do popisu. Idealnie byłoby, gdyby funkcja przyjmowała dowolną liczbę kolorów w gradiencie. Idealnie byłoby zrobić to obiektowo, żeby wywoływane było to np. tak:
  1. $gradient = new Gradient();
  2. $gradient->addColor(new Color(0, 255, 0), 0);
  3. $gradient->addColor(new Color(255, 255, 0), 0.5);
  4. $gradient->addColor(new Color(255, 0, 0), 1);
  5. var_dump($gradient->getColor(0.25)); // zwróciłoby obiekt klasy Color będący kolorem pośrednim między zielonym a żółtym

Można to też uprościć (chociaż już nie będzie tak elegancko) i stworzyć po prostu funkcję. Jeśli miałaby mieć tę samą funkcjonalność, musiałaby przyjmować kolory w tablicy lub jako zmienną liczbę parametrów, a pierwszym (lub ostatnim) parametrem byłaby pozycja pożądanego koloru (najlepiej w skali <0;1>). Wtedy do ustalenia byłby sposób podawania i zwracania kolorów, np. tablica array('r' => ..., 'g' => ..., 'b' => ...) lub szesnastkowo.
Go to the top of the page
+Quote Post
TomASS
post
Post #3





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

Ostrzeżenie: (0%)
-----


Dzięki, ale problem w tym, że pomiędzy czerwonym (255;0;0)
a zielonym (0;255;0)
wcale nie jest żółty (255;255;0)

a jakiś sraczkowty (127;127;0)

(IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #4





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


A na czym polega problem, że to nie żółty kolor? (IMG:style_emoticons/default/tongue.gif) Cały myk polega na tym, żeby proporcjonalnie obliczyć składowe koloru. Musisz obliczyć pozycję koloru względem dwóch kolorów, czyli dla 0.25 będzie to 0.5, bo leży dokładnie na środku przedziału zielony-sraczkowaty. Potem musisz wyliczyć poszczególne składowe korzystając z tej pozycji. Dla 0.5 będzie to dokładnie kolor między jednym a drugim, czyli w przypadku zieleń-sraczkowaty będzie to:
Kod
Zielony:     rgb(0,   255, 0)
Sraczkowaty: rgb(127, 127, 0)
Wynik:
R: (0 + 127) * 0.5 = 63,5
G: (255 + 127) * 0.5 = 191
B: (0 + 0) * 0.5 = 0


Załóżmy, że zaokrąglamy "normalnie".

Czyli naszym kolorem wyjściowym będzie:
Kod
rgb(64, 191, 0)
Go to the top of the page
+Quote Post
TomASS
post
Post #5





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

Ostrzeżenie: (0%)
-----


Ja chcę aby żołty był w połowie pomiędzy czerowny i zielonym.
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #6





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


(IMG:style_emoticons/default/sciana.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 28.09.2025 - 14:10