Witam,

mam problem z generowaniem przeźroczystego watermarka na klatkach gifa z użyciem biblioteki GD. Watermark to plik png z półprzeźroczytym napisem.
Gifa dzielę na klatki za pomocą gotowej klasy gofresizer. Gdy klatki nie zawierają przeźroczystości problemu nie ma - watermarki nakłada się pięknie z kanałem alfa. Jednak gdy klatka posiada przeźroczystość watermark staje się niebieski. Tak to wygląda:

klatka bez przeźroczystości:


klatka z przeźroczystością:


Gdy scalę klatki spowrotem w gifa pojawia się na watermarku mignięcie koloru niebieskiego.
Proszę o pomoc w rozwiązaniu problemu. Załączam kod źródłowy funkcji skalującej i nakłądającej watermarka na klatki

  1. //-------------------------------------------------------
  2. /**
  3.   * GD Resizer Device
  4.   * Resizes the animation frames
  5.   */
  6. private function resizeframes($watermark = false){
  7. $k=0;
  8. foreach($this->parsedfiles as $img){
  9.  
  10. $src = imagecreatefromgif($img);
  11.  
  12. $sw = $this->imagedata[$k]["width"];
  13. $sh = $this->imagedata[$k]["height"];
  14.  
  15. $nw = round($sw * $this->wr);
  16. $nh = round($sh * $this->hr);
  17. $sprite = imagecreatetruecolor($nw,$nh);
  18. $trans = imagecolortransparent($sprite);
  19.  
  20. imagealphablending($sprite, true);
  21. imagepalettecopy($sprite,$src);
  22. imagefill($sprite,0,0,imagecolortransparent($src));
  23. imagecolortransparent($sprite,imagecolortransparent($src));
  24. imagecopyresampled($sprite,$src,0,0,0,0,$nw,$nh,$sw,$sh);
  25.  
  26. if($watermark){
  27.  
  28. $overlay_gd_image = imagecreatefromstring(file_get_contents($this->watermarkFile));
  29.  
  30. $overlay_width = imagesx($overlay_gd_image);
  31. $overlay_height = imagesy($overlay_gd_image);
  32.  
  33. $newWatermarkW = $this->imagedata[0]["width"] * 0.15;
  34.  
  35. $watermarkProp = $overlay_height / $overlay_width;
  36. $newWatermarkH = $newWatermarkW * $watermarkProp;
  37.  
  38. imagealphablending($sprite, true);
  39.  
  40. imagecopyresampled(
  41. $sprite,
  42. $overlay_gd_image,
  43. $this->imagedata[0]["width"] - $newWatermarkW + 1,
  44. $this->imagedata[0]["height"] - $newWatermarkH + 1,
  45. 0,
  46. 0,
  47. $newWatermarkW,
  48. $newWatermarkH,
  49. $overlay_width,
  50. $overlay_height
  51. );
  52.  
  53. imagedestroy($overlay_gd_image);
  54. }
  55.  
  56. imagegif($sprite,$img);
  57. imagedestroy($sprite);
  58. imagedestroy($src);
  59.  
  60. $k++;
  61. }
  62. }