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']; } }