Esempio n. 1
0
 protected function setFrames()
 {
     foreach ($this->gif->frames as $framekey => $frame) {
         $contents = "GIF89a";
         $contents .= $this->gif->logicalscreendescriptor;
         if ($this->gif->globalcolortableflag === '1') {
             $contents .= $this->gif->globalcolortable;
         }
         $contents .= $frame['graphiccontrolextension'];
         $contents .= $frame['imagedescriptor'];
         if ($frame['localcolortableflag'] === '1') {
             $contents .= $frame['localcolortable'];
         }
         $contents .= $frame['imagedata'];
         $contents .= ";";
         $oldimage = @imagecreatefromstring($contents);
         if ($oldimage === false) {
             throw new \exception('Malformed GIF');
         }
         $width = Library::getUnsignedShortFromBinaryString($this->gif->logicalscreenwidth);
         $height = Library::getUnsignedShortFromBinaryString($this->gif->logicalscreenheight);
         $newimage = imagecreatetruecolor($width, $height);
         $transparentcolorindex = imagecolorallocatealpha($newimage, 225, 225, 225, 127);
         imagefill($newimage, 0, 0, $transparentcolorindex);
         imagecolortransparent($newimage, $transparentcolorindex);
         $dst_x = Library::getUnsignedShortFromBinaryString($frame['leftposition']);
         $dst_y = Library::getUnsignedShortFromBinaryString($frame['topposition']);
         $src_w = Library::getUnsignedShortFromBinaryString($frame['width']);
         $src_h = Library::getUnsignedShortFromBinaryString($frame['height']);
         imagecopy($newimage, $oldimage, $dst_x, $dst_y, 0, 0, $src_w, $src_h);
         $this->frames[$framekey]['resource'] = $newimage;
         imagedestroy($oldimage);
         $this->frames[$framekey]['delaytime'] = $frame['delaytime'];
         $this->frames[$framekey]['disposalmethod'] = $frame['disposalmethod'];
     }
 }