Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [GD2]Funkcja iimagettftext traci kanał alpha
Forum PHP.pl > Forum > PHP
dadexix
Witam,

mam taką funkcje.... używam jej do rozmycia tekstu z imagettftekst.... tracę przez nią kanał alpha... czemu? co zrobić by nie tracić przeźroczystości?



  1. <?php
  2. function blur ($image) {
  3. $imagex = imagesx($image);
  4. $imagey = imagesy($image);
  5. $dist = 1;
  6. for ($x = 0; $x < $imagex; ++$x) {
  7. for ($y = 0; $y < $imagey; ++$y) {
  8. $newr = 0;
  9. $newg = 0;
  10. $newb = 0;
  11.  
  12. $colours = array();
  13. $thiscol = imagecolorat($image, $x, $y);
  14. for ($k = $x - $dist; $k <= $x + $dist; ++$k) {
  15. for ($l = $y - $dist; $l <= $y + $dist; ++$l) {
  16. if ($k < 0) { $colours[] = $thiscol; continue; }
  17. if ($k >= $imagex) { $colours[] = $thiscol; continue; }
  18. if ($l < 0) { $colours[] = $thiscol; continue; }
  19. if ($l >= $imagey) { $colours[] = $thiscol; continue; }
  20. $colours[] = imagecolorat($image, $k, $l);
  21. }
  22. }
  23. foreach($colours as $colour) {
  24. $newr += ($colour >> 16) & 0xFF;
  25. $newg += ($colour >> 8) & 0xFF;
  26. $newb += $colour & 0xFF;
  27. }
  28.  
  29. $numelements = count($colours);
  30. $newr /= $numelements;
  31. $newg /= $numelements;
  32. $newb /= $numelements;
  33.  
  34. $newcol = imagecolorallocate($image, $newr, $newg, $newb);
  35. imagesetpixel($image, $x, $y, $newcol);
  36. }
  37. }
  38. }
  39. ?>


Pozdrawiam
aiv
To fragment kodu z mojego resizera obrazków. Może rozwiąże Twój problem:

  1. <?php
  2. // $source - wynik działania imagecreatefromXXX();
  3. // $type - typ pliku (gif, jpg, png) rozpoznawany na podstawie mime
  4. // $size - wynik działania getimagesize()
  5. $colorTransparent = imagecolortransparent($source);
  6. if ($type == 'gif' && $colorTransparent >= 0) {
  7. $target = imagecreate($newWidth, $newHeight); // $newWidth i $newHeight to nowe rozmiary pliku graficznego
  8. imagepalettecopy($target, $source);
  9. imagefill($target, 0, 0, $colorTransparent);
  10. imagecolortransparent($target, $colorTransparent);
  11. imagecopyresized($target, $source, 0, 0, 0, 0, $newWidth, $newHeight, $size[0], $size[1]);
  12. } else {
  13. $target = imagecreatetruecolor($newWidth, $newHeight);
  14. imagecopyresampled($target, $source, 0, 0, 0, 0, $newWidth, $newHeight, $size[0], $size[1]);
  15. }
  16. ?>
dadexix
hm.. dzięki myślałem że będzie działać ale niestety...


  1. <?php
  2. function blur ($image) {
  3. $colorTransparent=imagecolortransparent($image);
  4. $imagex = imagesx($image);
  5. $imagey = imagesy($image);
  6. $dist = 1;
  7. for ($x = 0; $x < $imagex; ++$x) {
  8. for ($y = 0; $y < $imagey; ++$y) {
  9. $newr = 0;
  10. $newg = 0;
  11. $newb = 0;
  12.  
  13. $colours = array();
  14. $thiscol = imagecolorat($image, $x, $y);
  15. for ($k = $x - $dist; $k <= $x + $dist; ++$k) {
  16. for ($l = $y - $dist; $l <= $y + $dist; ++$l) {
  17. if ($k < 0) { $colours[] = $thiscol; continue; }
  18. if ($k >= $imagex) { $colours[] = $thiscol; continue; }
  19. if ($l < 0) { $colours[] = $thiscol; continue; }
  20. if ($l >= $imagey) { $colours[] = $thiscol; continue; }
  21. $colours[] = imagecolorat($image, $k, $l);
  22. }
  23. }
  24. foreach($colours as $colour) {
  25. $newr += ($colour >> 16) & 0xFF;
  26. $newg += ($colour >> 8) & 0xFF;
  27. $newb += $colour & 0xFF;
  28. }
  29.  
  30. $numelements = count($colours);
  31. $newr /= $numelements;
  32. $newg /= $numelements;
  33. $newb /= $numelements;
  34.  
  35. $newcol = imagecolorallocate($image, $newr, $newg, $newb);
  36. imagesetpixel($image, $x, $y, $newcol);
  37.  
  38.  
  39.  
  40. }
  41. }
  42. imagecolortransparent($image,$colorTransparent);
  43. }
  44. ?>


niestety... zmieniłem tak funkcje i nie działa...


powód jest prosty - każdy piksel zmienia się... chyba nie da się z tym poradzić bo jeśli bym nałożył przeźroczystość wszędzie tam gdzie nie było rozmycia... rozmycie mi zniknie...

jedynie chyba da się zrobić by nie rozmywało wszystkiego tylko np. 3 razy w bok... ale jak to nie mam pojęcia... za tempy jestem:P

ktoś ma gdzie wsadzić jakąś pętle by robiło tylko na 3-4 px w bok?
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.