witam, chcialem napisac taki skrypcik ktoremu dajemy jpg, a on zczytuje z niego najwazniejsze kolory i zapisuje je w tablicy. nie mialem za duzo doczynienia z funkcjami graficznymi, dlatego troszke poczytalem w sieci (m.in. na tym forum), wykozystalem kilka gotowych funkcji, i napisalem cos, czego jednak nawet nie moge przetestowac, bo Maximum execution time of 30 seconds exceeded (nawet na stosunkowo malym obrazku 300x225px).
Moja fukcja miala dzialac tak, ze zczytuje kolor 1go pixela, zapisuje w tablicy, potem, zeby nie sprawdzac kazdego pixela, bo trwalo by to wieki, przeskakuje np. o 70 pixeli w lewo, zczytuje pixel, porownuje jego kolor ze wszystkimi juz zapisanymi, jesli jest podobny (fukcje "podobny" w ktorej ustawia sie tolerancje dla pixeli znalazlem gdzies w sieci) to go olewa, jesli nie, to zapisuje do tablicy, w ten sposob na koniec powinienem miec tablice w ktorej przynajmniej w przyblizeniu mamy zapisane (hex) kolory wystepujace na obrazku. dalo by sie jakos to "uzdatnic" zeby dzialalo? (na moim serverze [superhost] mam maxymalny czas wykonywania skryptu 8s., paranoja, dlatego kozystam z servera znajomego do testow, docelowo jendak chcialbym zeby to smigalo tez u mnie).

  1. <?php
  2. function rgb2hex( $r, $g, $b )
  3. {
  4.  return sprintf( '#%02s%02s%02s', dechex( $r ), dechex( $g ), dechex( $b ) );
  5. }
  6.  
  7. ##########
  8.  
  9. function podobny($pix1, $pix2, $tol=30) {
  10.  
  11.  for($i=0,$podobne=true;$i<3;$i++)
  12. if(($pix1[$i]+$tol<$pix2[$i]) || ($pix1[$i]-$tol>$pix2[$i])) $podobne=false;
  13.  
  14.  return $podobne;
  15. }
  16.  
  17. $size = getimagesize('foto.jpg');
  18.  
  19. $im = imagecreatefromjpeg('foto.jpg');
  20.  
  21. $coIle = 70;
  22.  
  23. for ($y=1; $y+20<$size[1]; $y+20){
  24. for ($x=1; $x+$coIle<$size[0]; $x=$x+coIle){
  25. $color_index = imagecolorat($im, $x, $y);
  26. $colors = imagecolorsforindex($im, $color_index);
  27. $hexcolor=rgb2hex($colors[red], $colors[green], $colors[blue]);
  28. if (!isset($tablicaKolorow[0])) {
  29. $tablicaKolorow[0]=$hexcolor;
  30.  
  31. } else {
  32.  
  33. for($i=0;$i<=count($tablicaKolorow);$i++){
  34. $pixelPodobny = podobny($tablicaKolorow, $hexcolor);
  35. if (!($pixelPodobny)) {
  36. $tablicaKolorow[]=$hexcolor;
  37. break;
  38. }
  39. }
  40. }
  41. }
  42. }
  43. ?>