function buildContent($tagCode, $opts = array()) { $writer = new IO_Bit(); $writer->putUI16LE($this->_CharacterID); $bitmapFormat = $this->_BitmapFormat; $writer->putUI8($bitmapFormat); $writer->putUI16LE($this->_BitmapWidth); $writer->putUI16LE($this->_BitmapHeight); if ($bitmapFormat == 3) { $writer->putUI8($this->_BitmapColorTableSize - 1); } $writer->putData($this->_ZlibBitmapData); return $writer->output(); }
function build() { $writer_head = new IO_Bit(); $writer = new IO_Bit(); /* SWF Header */ $writer_head->putData($this->_headers['Signature']); $writer_head->putUI8($this->_headers['Version']); $writer_head->putUI32LE($this->_headers['FileLength']); /* SWF Movie Header */ IO_SWF_Type_RECT::build($writer, $this->_headers['FrameSize']); $writer->byteAlign(); $writer->putUI16LE($this->_headers['FrameRate']); $writer->putUI16LE($this->_headers['FrameCount']); /* SWF Tags */ foreach ($this->_tags as $idx => $tag) { $tagData = $tag->build(); if ($tagData != false) { $writer->putData($tagData); } else { throw new IO_SWF_Exception("tag build failed (tag idx={$idx})"); } } list($fileLength, $bit_offset_dummy) = $writer->getOffset(); $fileLength += 8; // swf header $this->_headers['FileLength'] = $fileLength; $writer_head->setUI32LE($fileLength, 4); if ($this->_headers['Signature'][0] == 'C') { return $writer_head->output() . gzcompress($writer->output()); } return $writer_head->output() . $writer->output(); }
function getStdJpegData() { if (count($this->_jpegChunk) == 0) { $this->_splitChunk(false, false); } $bitout = new IO_Bit(); foreach ($this->stdChunkOrder as $stdMarker) { foreach ($this->_jpegChunk as $chunk) { $marker = $chunk['marker']; if ($stdMarker == $marker) { $bitout->putUI8(0xff); $bitout->putUI8($marker); if (!is_null($chunk['length'])) { $bitout->putUI16BE($chunk['length']); } $bitout->putData($chunk['data']); if ($marker == 0xd8 || $marker == 0xd9) { break; // SOI | EOI } } } } return $bitout->output(); }
public function build() { $writer = new IO_Bit(); foreach ($this->_actions as $index => $d) { $writer->putUI8($d['ActionCode']); if ($d['Length'] == 0) { continue; } $writer->putUI16LE($d['Length']); $writer->putData($d['Content']); } return $writer->output(); }
static function build(&$writer, $action, $opts = array()) { $code = $action['Code']; $writer->putUI8($code); if (0x80 <= $code) { switch ($code) { case 0x81: // ActionGotoFrame $writer->putUI16LE(2); $writer->putUI16LE($action['Frame']); break; case 0x83: // ActionGetURL $data = $action['UrlString'] . "" . $action['TargetString'] . ""; $writer->putUI16LE(strlen($data)); $writer->putData($data); break; case 0x88: // ActionConstantPool $count = count($action['ConstantPool']); $data = implode("", $action['ConstantPool']) . ""; $writer->putUI16LE(strlen($data) + 2); $writer->putUI16LE($count); $writer->putData($data); break; case 0x8a: // ActionWaitForFrame $writer->putUI16LE($action['Frame']); $writer->putUI8($action['SkipCount']); break; case 0x8b: // ActionSetTarget $data = $action['TargetName'] . ""; $writer->putUI16LE(strlen($data)); $writer->putData($data); break; case 0x8c: // ActionGoToLabel $data = $action['Label'] . ""; $writer->putUI16LE(strlen($data)); $writer->putData($data); break; case 0x8d: // ActionWaitForFrame2 $writer->putUI16LE($action['Frame']); $writer->putUI8($action['SkipCount']); break; case 0x8e: // ActionDefineFunction2 $writer->putData($action['FunctionName'] . ""); // $numParams = $action['NumParams']; $numParams = count($parameters); $writer->putUI16LE($numParams); $writer->putUI8($action['RegisterCount']); // $writer->putUIBit($action['PreloadParentFlag']); $writer->putUIBit($action['PreloadBootFlag']); $writer->putUIBit($action['SuppressSuperFlag']); $writer->putUIBit($action['PreloadSuperFlag']); $writer->putUIBit($action['SuppressArgumentsFlag']); $writer->putUIBit($action['PreloadArgumentsFlag']); $writer->putUIBit($action['SuppressThisFlag']); $writer->putUIBit($action['PreloadThisFlag']); // if (isset($action['(Reserve)'])) { $writer->putUIBits($action['(Reserve)'], 7); } else { $writer->putUIBits(0, 7); } $writer->putUIBit($action['PreloadGlobalFlag']); // $parameters = $action['Parameters']; foreach ($parameters as $registerParam) { $writer->putUI8($registerParam['Register']); $writer->putData($registerParam['ParamName'] . ""); } $writer->putUI16LE($action['codeSize']); break; break; case 0x96: // ActionPush $values_writer = new IO_Bit(); foreach ($action['Values'] as $value) { $type = $value['Type']; $values_writer->putUI8($type); switch ($type) { case 0: // STRING $str = $value['String']; $pos = strpos($str, ""); if ($pos === false) { $str .= ""; } else { $str = substr($str, 0, $pos + 1); } $values_writer->putData($str); break; case 1: // Float IO_SWF_Type_Float::build($values_writer, $value['Float']); break; case 2: // null // nothing to do. break; case 3: // undefined // nothing to do. break; case 4: // RegisterNumber $values_writer->putUI8($value['RegisterNumber']); break; case 5: // Boolean $values_writer->putUI8($value['Boolean']); break; case 6: // Double IO_SWF_Type_Double::build($values_writer, $value['Double']); break; case 7: // Integer $values_writer->putUI32LE($value['Integer']); break; case 8: // Constant8 $values_writer->putUI8($value['Constant8']); break; case 9: // Constant16 $values_writer->putUI16LE($value['Constant16']); break; default: throw new IO_SWF_Exception("Illegal ActionPush value's type({$type})"); break; } } $values_data = $values_writer->output(); $writer->putUI16LE(strlen($values_data)); $writer->putData($values_data); break; case 0x99: // ActionJump $writer->putUI16LE(2); $writer->putSI16LE($action['BranchOffset']); break; case 0x9a: // ActionGetURL2 $writer->putUI16LE(1); // $writer->putUIBits($action['SendVarsMethod'], 2); // $writer->putUIBits(0, 4); // Reserved // $writer->putUIBit($action['LoadTargetFlag']); // $writer->putUIBit($action['LoadVariablesFlag']); // swf_file_format_spec_v10 bug, field reverse. $writer->putUIBit($action['LoadVariablesFlag']); $writer->putUIBit($action['LoadTargetFlag']); $writer->putUIBits(0, 4); // Reserved $writer->putUIBits($action['SendVarsMethod'], 2); break; case 0x9d: // ActionIf $writer->putUI16LE(2); $writer->putSI16LE($action['Offset']); break; case 0x9f: // ActionGotoFrame2 if (isset($action['SceneBias'])) { $sceneBiasFlag = 1; $writer->putUI16LE(3); } else { $sceneBiasFlag = 0; $writer->putUI16LE(1); } $writer->putUIBits(0, 6); // Reserved $writer->putUIBit($sceneBiasFlag); $writer->putUIBit($action['PlayFlag']); if ($sceneBiasFlag) { $writer->putUI16LE($action['SceneBias']); } break; default: if (isset($action['Data'])) { $data = $action['Data']; $writer->putUI16LE(strlen($data)); $writer->putData($data); } else { $writer->putUI16LE(0); } break; } } }