Verzeichnisstruktur phpBB-3.2.0


Veröffentlicht
06.01.2017

So funktioniert es


Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück

Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

      (Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

TypeIff.php

Zuletzt modifiziert: 09.10.2024, 12:57 - Dateigröße: 2.73 KiB


 001  <?php
 002   
 003  /**
 004   * fast-image-size image type iff
 005   * @package fast-image-size
 006   * @copyright (c) Marc Alexander <admin@m-a-styles.de>
 007   *
 008   * For the full copyright and license information, please view the LICENSE
 009   * file that was distributed with this source code.
 010   */
 011   
 012  namespace FastImageSize\Type;
 013   
 014  class TypeIff extends TypeBase
 015  {
 016      /** @var int IFF header size. Grab more than what should be needed to make
 017       * sure we have the necessary data */
 018      const IFF_HEADER_SIZE = 32;
 019   
 020      /** @var string IFF header for Amiga type */
 021      const IFF_HEADER_AMIGA = 'FORM';
 022   
 023      /** @var string IFF header for Maya type */
 024      const IFF_HEADER_MAYA = 'FOR4';
 025   
 026      /** @var string IFF BTMHD for Amiga type */
 027      const IFF_AMIGA_BTMHD = 'BMHD';
 028   
 029      /** @var string IFF BTMHD for Maya type */
 030      const IFF_MAYA_BTMHD = 'BHD';
 031   
 032      /** @var string PHP pack format for unsigned short */
 033      const PACK_UNSIGNED_SHORT = 'n';
 034   
 035      /** @var string PHP pack format for unsigned long */
 036      const PACK_UNSIGNED_LONG = 'N';
 037   
 038      /** @var string BTMHD of current image */
 039      protected $btmhd;
 040   
 041      /** @var int Size of current BTMHD */
 042      protected $btmhdSize;
 043   
 044      /** @var string Current byte type */
 045      protected $byteType;
 046   
 047      /**
 048       * {@inheritdoc}
 049       */
 050      public function getSize($filename)
 051      {
 052          $data = $this->fastImageSize->getImage($filename, 0, self::IFF_HEADER_SIZE);
 053   
 054          $signature = $this->getIffSignature($data);
 055   
 056          // Check if image is IFF
 057          if ($signature === false)
 058          {
 059              return;
 060          }
 061   
 062          // Set type constraints
 063          $this->setTypeConstraints($signature);
 064   
 065          // Get size from data
 066          $btmhdPosition = strpos($data, $this->btmhd);
 067          $size = unpack("{$this->byteType}width/{$this->byteType}height", substr($data, $btmhdPosition + self::LONG_SIZE + strlen($this->btmhd), $this->btmhdSize));
 068   
 069          $this->fastImageSize->setSize($size);
 070          $this->fastImageSize->setImageType(IMAGETYPE_IFF);
 071      }
 072   
 073      /**
 074       * Get IFF signature from data string
 075       *
 076       * @param string|bool $data Image data string
 077       *
 078       * @return false|string Signature if file is a valid IFF file, false if not
 079       */
 080      protected function getIffSignature($data)
 081      {
 082          $signature = substr($data, 0, self::LONG_SIZE);
 083   
 084          // Check if image is IFF
 085          if ($signature !== self::IFF_HEADER_AMIGA && $signature !== self::IFF_HEADER_MAYA)
 086          {
 087              return false;
 088          }
 089          else
 090          {
 091              return $signature;
 092          }
 093      }
 094   
 095      /**
 096       * Set type constraints for current image
 097       *
 098       * @param string $signature IFF signature of image
 099       */
 100      protected function setTypeConstraints($signature)
 101      {
 102          // Amiga version of IFF
 103          if ($signature === 'FORM')
 104          {
 105              $this->btmhd = self::IFF_AMIGA_BTMHD;
 106              $this->btmhdSize = self::LONG_SIZE;
 107              $this->byteType = self::PACK_UNSIGNED_SHORT;
 108          }
 109          // Maya version
 110          else
 111          {
 112              $this->btmhd = self::IFF_MAYA_BTMHD;
 113              $this->btmhdSize = self::LONG_SIZE * 2;
 114              $this->byteType = self::PACK_UNSIGNED_LONG;
 115          }
 116      }
 117  }
 118