示例#1
0
文件: Lossless.php 项目: yoya/IO_SWF
 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();
 }
示例#2
0
文件: SWF.php 项目: yoya/IO_SWF
 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();
 }
示例#3
0
文件: JPEG.php 项目: yoya/IO_SWF
 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();
 }
示例#4
0
 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();
 }
示例#5
0
文件: Action.php 项目: yoya/IO_SWF
 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;
         }
     }
 }