Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] operacje na obrazie
Forum PHP.pl > Forum > Przedszkole
SaMi
Witam,
mam w sumie prawie dobrze działający skrypt który usuwa z obrazka białe plamki o wielkości 1 px niestety jeśli trafi się większa plamka powiedzmy kwadrat 2x2 czyli 4 pixele to teoretycznie ma on te pixele pominąć i iść dalej w poszukiwaniu pojedynczych pixeli, w rzeczywistości obcina cześć tego większej plamki. I nie wiem dlaczego może to przez złe użycie continue ? bo obcina je w osi Y. Nie wiem czy dobrze wytłumaczyłem problem w razie niejasności postaram się sprostować.

  1. <?
  2. $im = imagecreatefromjpeg('szum1.jpg');
  3.  
  4. $szerokosc = imagesx($im);
  5. $wysokosc = imagesy($im);
  6.  
  7. $arrPixeleSzum = array();
  8.  
  9. for ($x=0; $x<$szerokosc; $x++) {
  10.  for ($y=0; $y<$wysokosc; $y++) {
  11. $c = imagecolorsforindex($im, imagecolorat($im, $x, $y));
  12.  
  13. $kolorSuma = $c['red']+$c['green']+$c['blue'];
  14.  
  15. if ($kolorSuma >=720) {
  16.  for ($xx=$x-1; $xx<$x+2; $xx++) {
  17.  for ($yy=$y-1; $yy<$y+2; $yy++) {
  18. $cc = imagecolorsforindex($im, imagecolorat($im, $xx, $yy));
  19. $kolorSuma1 = $cc['red']+$cc['green']+$cc['blue'];
  20.  
  21.  if ($kolorSuma1 >720) {
  22. array_push($arrPixeleSzum, "$xx", "$yy");
  23. $zliczonePixele=count($arrPixeleSzum);
  24.  if ($zliczonePixele > 2){
  25.  $arrPixele = array(); 
  26.  continue 3;
  27. }
  28.  }
  29. }  
  30.  }
  31.  }
  32.  
  33. $wspPixeli = array_chunk($arrPixeleSzum, 2);
  34. foreach($wspPixeli as $wartosci)
  35. {
  36. imagesetpixel($im, $wartosci[0], $wartosci[1], imagecolorallocate($im, 0, 0, 0));
  37. }
  38.  
  39. }
  40.  }
  41.  
  42. header('Content-type: image/jpg');
  43. imagejpeg($im, '', 100);
  44. imagedestroy($im);
  45.  
  46. ?>


z góry dziękuję za pomoc

Chciałbym odświeżyć temat gdyż udało mi się rozwiązać kilka problemów ale napotkałem na inny który opisuje wyżej.
ayeo
Witaj!
Musisz poprostu sprawdzać czy dany piksej x,y jest samotny smile.gif mamy hipotetyczna funkcje, ktora sprawdza czy piksel jest bialy: is_white($x,$y); i terazsprawdzasz kazdy piksel po kolei w petli:

  1. <?php
  2. if (is_white($x,  $y) AND
  3.  !is_white($x-1, $y) AND
  4.  !is_white($x+1, $y) AND
  5.  !is_white($x, $y-1) AND
  6.  !is_white($x, $y+1)) // bialy piksel jest samotny :)
  7. ?>
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.