Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][GD]Sprawdzanie czy obrazek zawiera kolor czarny
moto0095
post 12.10.2011, 22:54:47
Post #1





Grupa: Zarejestrowani
Postów: 247
Pomógł: 9
Dołączył: 12.03.2010

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


Witam, tak jak w temacie potrzebuję sprawdzić czy obrazek zawiera kolor czarny.

Ten post edytował moto0095 12.10.2011, 22:55:12
Go to the top of the page
+Quote Post
lukaskolista
post 13.10.2011, 08:34:35
Post #2





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

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


Ja potrzebuje pieniedzy smile.gif a tak na powaznie poza przeskanowaniem obrazka pixel po pixelu nie przychodzi mi nic innego do glowy. Poza tym kolor czarny to cala gama odcieni ktorych zakres trzeba gdzies zdefiniowac.
Go to the top of the page
+Quote Post
Kshyhoo
post 13.10.2011, 09:39:02
Post #3





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Skrypt wylicza ilość procentową kolorów, przerób sobie go do własnych potrzeb...
  1. <?php
  2. function rgb2hsl($r, $g, $b) {
  3. $r /= 255;
  4. $g /= 255;
  5. $b /= 255;
  6. $min = min($r, $g, $b);
  7. $max = max($r, $g, $b);
  8. $delta = $max-$min;
  9. $l = ($max+$min)/2;
  10. if ($delta==0) {
  11. $h = 0;
  12. $s = 0;
  13. } else {
  14. if ($l<0.5) $s = $delta/($max+$min);
  15. else $s = $delta/(2-$max-$min);
  16. $dr = (($max-$r)/6 + $delta/2)/$delta;
  17. $dg = (($max-$g)/6 + $delta/2)/$delta;
  18. $db = (($max-$b)/6 + $delta/2)/$delta;
  19. if ($r==$max) $h = $db-$dg;
  20. else if ($g==$max) $h = 1/3+$dr-$db;
  21. else if ($b==$max) $h = 2/3+$dg-$dr;
  22. if ($h<0) $h +=1;
  23. if ($h>1) $h -=1;
  24. }
  25. return array(round($h*359), round($s*359), round($l*359));
  26. }
  27.  
  28. $plik = "obrazek.jpg"; // obrazek
  29.  
  30. $im = imagecreatefromjpeg($plik);
  31. $szerokosc = imagesx($im);
  32. $wysokosc = imagesy($im);
  33. for ($x=0;$x<$szerokosc;$x++) {
  34. for ($y=0;$y<$wysokosc;$y++) {
  35. $c = imagecolorsforindex($im, imagecolorat($im, $x, $y));
  36. list($h, $s, $l) = rgb2hsl($c['red'], $c['green'], $c['blue']);
  37. if ($h>=0 and $h<=20) $czerwony++;
  38. if ($h>20 and $h<=45) $pomaranczowy++;
  39. if ($h>45 and $h<=60) $zolty++;
  40. if ($h>60 and $h<=160) $zielony++;
  41. if ($h>160 and $h<=190) $turkusowy++;
  42. if ($h>190 and $h<265) $niebieski++;
  43. if ($h>265 and $h<335) $rozowy++;
  44. if ($h>335) $czerwony++;
  45. if ($c['red']+ $c['green']+ $c['blue']<30) $czarny++;
  46. if ($c['red']+ $c['green']+ $c['blue']>235*3) $bialy++;
  47. }
  48. }
  49. $pikseli = $szerokosc*$wysokosc;
  50. echo "czerwony ~ ".round($czerwony/$pikseli*100)."%<br />";
  51. echo "pomaranczowy ~ ".round($pomaranczowy/$pikseli*100)."%<br />";
  52. echo "żółty ~ ".round($zolty/$pikseli*100)."%<br />";
  53. echo "zielony ~ ".round($zielony/$pikseli*100)."%<br />";
  54. echo "turkusowy ~ ".round($turkusowy/$pikseli*100)."%<br />";
  55. echo "niebieski ~ ".round($niebieski/$pikseli*100)."%<br />";
  56. echo "różowy ~ ".round($rozowy/$pikseli*100)."%<br />";
  57. echo "biały ~ ".round($bialy/$pikseli*100)."%<br />";
  58. echo "czarny ~ ".round($czarny/$pikseli*100)."%<br />";
  59. ?>

1. Piksel po pikselu odczytujesz składowe RGB z obrazka.
2. Konwertujesz na system HSL, gdzie składowa H określa kolor w zakresie od 0 do 359 (system RGB nie nadaje się).


--------------------
Go to the top of the page
+Quote Post
Kazaan
post 13.10.2011, 18:04:01
Post #4





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 17.07.2008

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


Cytat(Kshyhoo @ 13.10.2011, 10:39:02 ) *
2. Konwertujesz na system HSL, gdzie składowa H określa kolor w zakresie od 0 do 359 (system RGB nie nadaje się).



Mozesz rozwinąć myśl questionmark.gif dlaczego RGB sie do tego nie nadaje? z góry dzieki
Go to the top of the page
+Quote Post
Kshyhoo
post 13.10.2011, 22:23:54
Post #5





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Co mogą te dwa systemy:
RGB:
numer koloru = R * 256^2 + G * 256 + B

HSL:
H: Hue – odcień, barwa, o wartościach z przedziału: od 0 do 360 stopni.
S: Saturation – nasycenie koloru, z przedziału 0...1 albo 0...100%.
L: Lightness – średnie światło białe, z przedziału 0...1 albo 0...100%.

Wnioski wyciągnij sam...


--------------------
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 16.06.2025 - 21:05