Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][GD]Sprawdzanie czy obrazek zawiera kolor czarny
moto0095
post
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
 
Start new topic
Odpowiedzi
Kshyhoo
post
Post #2





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

Posty w temacie


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: 24.12.2025 - 11:54