/**
  * @param FileHandler $fh
  */
 public function readDataSubBlocks($fh)
 {
     $this->dataSubBlocks = "";
     while (!$fh->compareByte("")) {
         $subBlockLength = $fh->readByteUint();
         if ($subBlockLength == 0) {
             return;
         }
         $this->dataSubBlocks .= chr($subBlockLength) . $fh->readData($subBlockLength);
     }
 }
 /**
  * @param FileHandler $fh
  */
 public function decode($fh)
 {
     $fh->seekForward(1);
     // skip block label.
     $this->blockLength = $fh->readByteUint();
     // 4
     $packedFields = $fh->readByteUint();
     $this->reserved = ($packedFields & 0x70) >> 5;
     $this->disposalMethod = ($packedFields & 0x1c) >> 2;
     $this->userInputFlag = ($packedFields & 0x2) > 0;
     $this->transparentColorFlag = ($packedFields & 0x1) > 0;
     $this->delayTime = $fh->readUint16();
     $this->transparentColorIndex = $fh->readByteUint();
     // Spool past the \x00 terminator byte. There *should* only be one.
     while ($fh->compareByte("")) {
         $fh->readByte();
     }
     // The GCE will always be followed by the Image Descriptor.
     $this->imageDescriptor = new ImageDescriptor($fh);
     $this->imageDescriptor->parentGCE = $this;
 }
Пример #3
0
 /**
  * @param FileHandler             $fh
  * @param FileHandler             $fhW
  * @param float                   $ratio
  * @param LogicalScreenDescriptor $lsd
  */
 private static function readExtensionBlock($fh, $fhW, $ratio, $lsd)
 {
     $fh->seekForward(1);
     $blockLabel = $fh->peekByte();
     switch (ord($blockLabel)) {
         case AbstractExtensionBlock::LABEL_APPLICATION:
             $adb = new ApplicationExtension($fh);
             $adb->encodeToFile($fhW);
             break;
         case AbstractExtensionBlock::LABEL_COMMENT:
             $ceb = new CommentExtension($fh);
             $ceb->encodeToFile($fhW);
             break;
         case AbstractExtensionBlock::LABEL_GRAPHICS_CONTROL:
             $gce = new GraphicControlExtension($fh);
             self::resizeGraphicControlExtensionBlock($gce, $ratio, $fhW, $lsd);
             break;
         case AbstractExtensionBlock::LABEL_PLAIN_TEXT:
             $pte = new PlainTextExtension($fh);
             $pte->encodeToFile($fhW);
             break;
         case AbstractExtensionBlock::CONTROL_TRAILER:
             break;
         default:
             $fh->seekForward(1);
             while (!$fh->compareByte("")) {
                 $fh->seekForward(1);
             }
     }
     if ($fh->compareByte("")) {
         $fh->readByte();
     }
 }
Пример #4
0
 /**
  * @param FileHandler             $fh
  * @param int                     $frameCount
  * @param LogicalScreenDescriptor $lsd
  * @param string                  $dstPath
  */
 private static function readExtensionBlock($fh, &$frameCount, $lsd, $dstPath)
 {
     $fh->seekForward(1);
     $blockLabel = $fh->peekByte();
     switch (ord($blockLabel)) {
         case AbstractExtensionBlock::LABEL_APPLICATION:
             new ApplicationExtension($fh);
             break;
         case AbstractExtensionBlock::LABEL_COMMENT:
             new CommentExtension($fh);
             break;
         case AbstractExtensionBlock::LABEL_GRAPHICS_CONTROL:
             $gce = new GraphicControlExtension($fh);
             self::writeFrame($dstPath, $frameCount, $lsd, $gce);
             break;
         case AbstractExtensionBlock::LABEL_PLAIN_TEXT:
             new PlainTextExtension($fh);
             break;
         case AbstractExtensionBlock::CONTROL_TRAILER:
             break;
         default:
             $fh->seekForward(1);
             while (!$fh->compareByte("")) {
                 $fh->seekForward(1);
             }
     }
     if ($fh->compareByte("")) {
         $fh->readByte();
     }
 }
Пример #5
0
 /**
  * @param FileHandler             $fh
  * @param int                     $frameCount
  * @param LogicalScreenDescriptor $lsd
  * @param string                  $dstPath
  */
 public static function dumpExtensionBlock($fh, &$frameCount, $lsd, $dstPath = null)
 {
     $fh->seekForward(1);
     $blockLabel = $fh->peekByte();
     switch (ord($blockLabel)) {
         case AbstractExtensionBlock::LABEL_APPLICATION:
             $adb = new ApplicationExtension($fh);
             self::dumpApplicationExtensionBlock($adb);
             break;
         case AbstractExtensionBlock::LABEL_COMMENT:
             $ceb = new CommentExtension($fh);
             self::dumpCommentExtensionBlock($ceb);
             break;
         case AbstractExtensionBlock::LABEL_GRAPHICS_CONTROL:
             $gce = new GraphicControlExtension($fh);
             $frameCount++;
             self::dumpGraphicControlExtensionBlock($gce, $frameCount, $lsd, $dstPath);
             break;
         case AbstractExtensionBlock::LABEL_PLAIN_TEXT:
             $pte = new PlainTextExtension($fh);
             self::dumpPlainTextExtensionBlock($pte);
             break;
         case AbstractExtensionBlock::CONTROL_TRAILER:
             break;
         default:
             $fh->seekForward(1);
             echo "Unknown Extension block found.......: 0x" . bin2hex($blockLabel) . " (" . ord($blockLabel) . ")\n";
             while (!$fh->compareByte("")) {
                 $fh->seekForward(1);
             }
     }
     if ($fh->compareByte("")) {
         $fh->readByte();
     }
 }