Пример #1
0
 /**
  * @param FileHandler $fh
  */
 public function decode($fh)
 {
     $fh->seekForward(1);
     // skip block label.
     $this->readDataSubBlocks($fh);
     while ($fh->peekByte() == "") {
         $fh->seekForward(1);
     }
 }
Пример #2
0
 /**
  * @param FileHandler $fh
  */
 public function decode($fh)
 {
     $fh->seekForward(1);
     // skip block label.
     $this->blockLength = $fh->readByteUint();
     // 11
     $this->applicationIdentifier = $fh->readData(8);
     $this->applicationAuthenticationCode = $fh->readData(3);
     $this->readDataSubBlocks($fh);
     while ($fh->peekByte() == "") {
         $fh->seekForward(1);
     }
 }
Пример #3
0
 /**
  * @param FileHandler $fh
  */
 public function decode($fh)
 {
     $fh->seekForward(1);
     // skip block label.
     $this->blockLength = $fh->readByteUint();
     // 12
     $this->textGridLeftPosition = $fh->readUint16();
     $this->textGridTopPosition = $fh->readUint16();
     $this->textGridWidth = $fh->readUint16();
     $this->textGridHeight = $fh->readUint16();
     $this->characterCellWidth = $fh->readByteUint();
     $this->characterCellHeight = $fh->readByteUint();
     $this->textFGColorIndex = $fh->readByteUint();
     $this->textBGColorIndex = $fh->readByteUint();
     $this->readDataSubBlocks($fh);
     // Spool past the \x00 terminator byte. There *should* only be one.
     while ($fh->peekByte() == "") {
         $fh->seekForward(1);
     }
 }
 /**
  * @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;
 }
Пример #5
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();
     }
 }
Пример #6
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();
     }
 }
Пример #7
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();
     }
 }
Пример #8
0
 /**
  * @param FileHandler             $fh
  * @param GraphicControlExtension $gce
  *
  * @return ImageDescriptor|GraphicControlExtension
  */
 public static function getFirstImageFrame($fh, $gce = null)
 {
     $nId = null;
     while ($nId == null && !$fh->isEOF()) {
         $blockLabel = $fh->peekByte();
         if (ord($blockLabel) == AbstractExtensionBlock::CONTROL_IMAGE) {
             $nId = new ImageDescriptor($fh);
             if ($gce != null) {
                 $gce->transparentColorFlag = false;
                 $gce->transparentColorIndex = 0;
             }
             return $nId;
         } else {
             if (ord($blockLabel) == AbstractExtensionBlock::CONTROL_EXTENSION) {
                 $fh->seekForward(1);
                 $blockLabel = $fh->peekByte();
                 if (ord($blockLabel) == AbstractExtensionBlock::LABEL_GRAPHICS_CONTROL) {
                     $nGce = new GraphicControlExtension($fh);
                     if ($gce != null) {
                         $gce->transparentColorFlag = $nGce->transparentColorFlag;
                         $gce->transparentColorIndex = $nGce->transparentColorIndex;
                     }
                     return $nGce;
                 }
             }
         }
     }
     return null;
 }