Verzeichnisstruktur phpBB-3.3.16
- Veröffentlicht
- 27.04.2026
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. |
|
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
TypeIff.php
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 use FastImageSize\ImageReader;
015
016 class TypeIff extends TypeBase
017 {
018 /** @var int IFF header size. Grab more than what should be needed to make
019 * sure we have the necessary data */
020 const IFF_HEADER_SIZE = 32;
021
022 /** @var string IFF header for Amiga type */
023 const IFF_HEADER_AMIGA = 'FORM';
024
025 /** @var string IFF header for Maya type */
026 const IFF_HEADER_MAYA = 'FOR4';
027
028 /** @var string IFF BTMHD for Amiga type */
029 const IFF_AMIGA_BTMHD = 'BMHD';
030
031 /** @var string IFF BTMHD for Maya type */
032 const IFF_MAYA_BTMHD = 'BHD';
033
034 /** @var string PHP pack format for unsigned short */
035 const PACK_UNSIGNED_SHORT = 'n';
036
037 /** @var string PHP pack format for unsigned long */
038 const PACK_UNSIGNED_LONG = 'N';
039
040 /** @var string BTMHD of current image */
041 protected $btmhd;
042
043 /** @var int Size of current BTMHD */
044 protected $btmhdSize;
045
046 /** @var string Current byte type */
047 protected $byteType;
048
049 /**
050 * {@inheritdoc}
051 */
052 public function getSize(string $filename, ImageReader $imageReader): ?array
053 {
054 $data = $imageReader->getImage($filename, 0, self::IFF_HEADER_SIZE);
055
056 if ($data === false)
057 {
058 return null;
059 }
060
061 $signature = $this->getIffSignature($data);
062
063 // Check if image is IFF
064 if ($signature === false)
065 {
066 return null;
067 }
068
069 // Set type constraints
070 $this->setTypeConstraints($signature);
071
072 // Get size from data
073 $btmhdPosition = strpos($data, $this->btmhd);
074 $size = unpack("{$this->byteType}width/{$this->byteType}height", substr($data, $btmhdPosition + self::LONG_SIZE + strlen($this->btmhd), $this->btmhdSize));
075 $size['type'] = IMAGETYPE_IFF;
076
077 return $size;
078 }
079
080 /**
081 * Get IFF signature from data string
082 *
083 * @param string $data Image data string
084 *
085 * @return false|string Signature if file is a valid IFF file, false if not
086 */
087 protected function getIffSignature(string $data)
088 {
089 $signature = substr($data, 0, self::LONG_SIZE);
090
091 // Check if image is IFF
092 if ($signature !== self::IFF_HEADER_AMIGA && $signature !== self::IFF_HEADER_MAYA)
093 {
094 return false;
095 }
096 else
097 {
098 return $signature;
099 }
100 }
101
102 /**
103 * Set type constraints for current image
104 *
105 * @param string $signature IFF signature of image
106 */
107 protected function setTypeConstraints(string $signature): void
108 {
109 // Amiga version of IFF
110 if ($signature === 'FORM')
111 {
112 $this->btmhd = self::IFF_AMIGA_BTMHD;
113 $this->btmhdSize = self::LONG_SIZE;
114 $this->byteType = self::PACK_UNSIGNED_SHORT;
115 }
116 // Maya version
117 else
118 {
119 $this->btmhd = self::IFF_MAYA_BTMHD;
120 $this->btmhdSize = self::LONG_SIZE * 2;
121 $this->byteType = self::PACK_UNSIGNED_LONG;
122 }
123 }
124 }
125