Example #1
0
 public function __construct($min, $max)
 {
     Pel::setStrictParsing(true);
     $this->min = $min;
     $this->max = $max;
     parent::__construct('PEL Exif Number Tests');
 }
Example #2
0
 public function testRead()
 {
     Pel::clearExceptions();
     Pel::setStrictParsing(false);
     $jpeg = new PelJpeg(dirname(__FILE__) . '/no-exif.jpg');
     $exif = $jpeg->getExif();
     $this->assertNull($exif);
     $this->assertTrue(count(Pel::getExceptions()) == 0);
 }
Example #3
0
 public function testRead()
 {
     Pel::clearExceptions();
     Pel::setStrictParsing(false);
     $jpeg = new PelJpeg(dirname(__FILE__) . '/nikon-coolscan-iv.jpg');
     $exif = $jpeg->getExif();
     $this->assertInstanceOf('lsolesen\\pel\\PelExif', $exif);
     $tiff = $exif->getTiff();
     $this->assertInstanceOf('lsolesen\\pel\\PelTiff', $tiff);
     /* The first IFD. */
     $ifd0 = $tiff->getIfd();
     $this->assertInstanceOf('lsolesen\\pel\\PelIfd', $ifd0);
     /* Start of IDF $ifd0. */
     $this->assertEquals(count($ifd0->getEntries()), 6);
     $entry = $ifd0->getEntry(271);
     // Make
     $this->assertInstanceOf('lsolesen\\pel\\PelEntryAscii', $entry);
     $this->assertEquals($entry->getValue(), 'Nikon');
     $this->assertEquals($entry->getText(), 'Nikon');
     $entry = $ifd0->getEntry(282);
     // XResolution
     $this->assertInstanceOf('lsolesen\\pel\\PelEntryRational', $entry);
     $this->assertEquals($entry->getValue(), array(0 => 2000, 1 => 1));
     $this->assertEquals($entry->getText(), '2000/1');
     $entry = $ifd0->getEntry(283);
     // YResolution
     $this->assertInstanceOf('lsolesen\\pel\\PelEntryRational', $entry);
     $this->assertEquals($entry->getValue(), array(0 => 2000, 1 => 1));
     $this->assertEquals($entry->getText(), '2000/1');
     $entry = $ifd0->getEntry(296);
     // ResolutionUnit
     $this->assertInstanceOf('lsolesen\\pel\\PelEntryShort', $entry);
     $this->assertEquals($entry->getValue(), 2);
     $this->assertEquals($entry->getText(), 'Inch');
     $entry = $ifd0->getEntry(306);
     // DateTime
     $this->assertInstanceOf('lsolesen\\pel\\PelEntryTime', $entry);
     $this->assertEquals($entry->getValue(), 1090023875);
     $this->assertEquals($entry->getText(), '2004:07:17 00:24:35');
     $entry = $ifd0->getEntry(531);
     // YCbCrPositioning
     $this->assertInstanceOf('lsolesen\\pel\\PelEntryShort', $entry);
     $this->assertEquals($entry->getValue(), 1);
     $this->assertEquals($entry->getText(), 'centered');
     /* Sub IFDs of $ifd0. */
     $this->assertEquals(count($ifd0->getSubIfds()), 2);
     $ifd0_0 = $ifd0->getSubIfd(2);
     // IFD Exif
     $this->assertInstanceOf('lsolesen\\pel\\PelIfd', $ifd0_0);
     /* Start of IDF $ifd0_0. */
     $this->assertEquals(count($ifd0_0->getEntries()), 7);
     $entry = $ifd0_0->getEntry(36864);
     // ExifVersion
     $this->assertInstanceOf('lsolesen\\pel\\PelEntryVersion', $entry);
     $this->assertEquals($entry->getValue(), 2.1);
     $this->assertEquals($entry->getText(), 'Exif Version 2.1');
     $entry = $ifd0_0->getEntry(37121);
     // ComponentsConfiguration
     $this->assertInstanceOf('lsolesen\\pel\\PelEntryUndefined', $entry);
     $this->assertEquals($entry->getValue(), "");
     $this->assertEquals($entry->getText(), 'Y Cb Cr -');
     $entry = $ifd0_0->getEntry(37500);
     // MakerNote
     $this->assertInstanceOf('lsolesen\\pel\\PelEntryUndefined', $entry);
     $expected = "0100";
     $this->assertEquals($entry->getValue(), $expected);
     $this->assertEquals($entry->getText(), '32 bytes unknown MakerNote data');
     $entry = $ifd0_0->getEntry(40960);
     // FlashPixVersion
     $this->assertInstanceOf('lsolesen\\pel\\PelEntryVersion', $entry);
     $this->assertEquals($entry->getValue(), 1);
     $this->assertEquals($entry->getText(), 'FlashPix Version 1.0');
     $entry = $ifd0_0->getEntry(40961);
     // ColorSpace
     $this->assertInstanceOf('lsolesen\\pel\\PelEntryShort', $entry);
     $this->assertEquals($entry->getValue(), 1);
     $this->assertEquals($entry->getText(), 'sRGB');
     $entry = $ifd0_0->getEntry(40962);
     // PixelXDimension
     $this->assertInstanceOf('lsolesen\\pel\\PelEntryLong', $entry);
     $this->assertEquals($entry->getValue(), 960);
     $this->assertEquals($entry->getText(), '960');
     $entry = $ifd0_0->getEntry(40963);
     // PixelYDimension
     $this->assertInstanceOf('lsolesen\\pel\\PelEntryLong', $entry);
     $this->assertEquals($entry->getValue(), 755);
     $this->assertEquals($entry->getText(), '755');
     /* Sub IFDs of $ifd0_0. */
     $this->assertEquals(count($ifd0_0->getSubIfds()), 0);
     $this->assertEquals($ifd0_0->getThumbnailData(), '');
     /* Next IFD. */
     $ifd0_1 = $ifd0_0->getNextIfd();
     $this->assertNull($ifd0_1);
     /* End of IFD $ifd0_0. */
     $ifd0_1 = $ifd0->getSubIfd(3);
     // IFD GPS
     $this->assertInstanceOf('lsolesen\\pel\\PelIfd', $ifd0_1);
     /* Start of IDF $ifd0_1. */
     $this->assertEquals(count($ifd0_1->getEntries()), 0);
     /* Sub IFDs of $ifd0_1. */
     $this->assertEquals(count($ifd0_1->getSubIfds()), 0);
     $this->assertEquals($ifd0_1->getThumbnailData(), '');
     /* Next IFD. */
     $ifd0_2 = $ifd0_1->getNextIfd();
     $this->assertNull($ifd0_2);
     /* End of IFD $ifd0_1. */
     $this->assertEquals($ifd0->getThumbnailData(), '');
     /* Next IFD. */
     $ifd1 = $ifd0->getNextIfd();
     $this->assertNull($ifd1);
     /* End of IFD $ifd0. */
     $this->assertTrue(count(Pel::getExceptions()) == 0);
 }
Example #4
0
 /**
  * Returns a description of a JPEG marker.
  *
  * @param PelJpegMarker $m
  *            the marker.
  *
  * @return string the description of the marker.
  */
 public static function getDescription($m)
 {
     switch ($m) {
         case self::SOF0:
             return Pel::tra('Encoding (baseline)');
         case self::SOF1:
             return Pel::tra('Encoding (extended sequential)');
         case self::SOF2:
             return Pel::tra('Encoding (progressive)');
         case self::SOF3:
             return Pel::tra('Encoding (lossless)');
         case self::SOF5:
             return Pel::tra('Encoding (differential sequential)');
         case self::SOF6:
             return Pel::tra('Encoding (differential progressive)');
         case self::SOF7:
             return Pel::tra('Encoding (differential lossless)');
         case self::SOF9:
             return Pel::tra('Encoding (extended sequential, arithmetic)');
         case self::SOF10:
             return Pel::tra('Encoding (progressive, arithmetic)');
         case self::SOF11:
             return Pel::tra('Encoding (lossless, arithmetic)');
         case self::SOF13:
             return Pel::tra('Encoding (differential sequential, arithmetic)');
         case self::SOF14:
             return Pel::tra('Encoding (differential progressive, arithmetic)');
         case self::SOF15:
             return Pel::tra('Encoding (differential lossless, arithmetic)');
         case self::SOI:
             return Pel::tra('Start of image');
         case self::EOI:
             return Pel::tra('End of image');
         case self::SOS:
             return Pel::tra('Start of scan');
         case self::COM:
             return Pel::tra('Comment');
         case self::DHT:
             return Pel::tra('Define Huffman table');
         case self::JPG:
             return Pel::tra('Extension');
         case self::DAC:
             return Pel::tra('Define arithmetic coding conditioning');
         case self::RST0:
             return Pel::fmt('Restart %d', 0);
         case self::RST1:
             return Pel::fmt('Restart %d', 1);
         case self::RST2:
             return Pel::fmt('Restart %d', 2);
         case self::RST3:
             return Pel::fmt('Restart %d', 3);
         case self::RST4:
             return Pel::fmt('Restart %d', 4);
         case self::RST5:
             return Pel::fmt('Restart %d', 5);
         case self::RST6:
             return Pel::fmt('Restart %d', 6);
         case self::RST7:
             return Pel::fmt('Restart %d', 7);
         case self::DQT:
             return Pel::tra('Define quantization table');
         case self::DNL:
             return Pel::tra('Define number of lines');
         case self::DRI:
             return Pel::tra('Define restart interval');
         case self::DHP:
             return Pel::tra('Define hierarchical progression');
         case self::EXP:
             return Pel::tra('Expand reference component');
         case self::APP0:
             return Pel::fmt('Application segment %d', 0);
         case self::APP1:
             return Pel::fmt('Application segment %d', 1);
         case self::APP2:
             return Pel::fmt('Application segment %d', 2);
         case self::APP3:
             return Pel::fmt('Application segment %d', 3);
         case self::APP4:
             return Pel::fmt('Application segment %d', 4);
         case self::APP5:
             return Pel::fmt('Application segment %d', 5);
         case self::APP6:
             return Pel::fmt('Application segment %d', 6);
         case self::APP7:
             return Pel::fmt('Application segment %d', 7);
         case self::APP8:
             return Pel::fmt('Application segment %d', 8);
         case self::APP9:
             return Pel::fmt('Application segment %d', 9);
         case self::APP10:
             return Pel::fmt('Application segment %d', 10);
         case self::APP11:
             return Pel::fmt('Application segment %d', 11);
         case self::APP12:
             return Pel::fmt('Application segment %d', 12);
         case self::APP13:
             return Pel::fmt('Application segment %d', 13);
         case self::APP14:
             return Pel::fmt('Application segment %d', 14);
         case self::APP15:
             return Pel::fmt('Application segment %d', 15);
         case self::JPG0:
             return Pel::fmt('Extension %d', 0);
         case self::JPG1:
             return Pel::fmt('Extension %d', 1);
         case self::JPG2:
             return Pel::fmt('Extension %d', 2);
         case self::JPG3:
             return Pel::fmt('Extension %d', 3);
         case self::JPG4:
             return Pel::fmt('Extension %d', 4);
         case self::JPG5:
             return Pel::fmt('Extension %d', 5);
         case self::JPG6:
             return Pel::fmt('Extension %d', 6);
         case self::JPG7:
             return Pel::fmt('Extension %d', 7);
         case self::JPG8:
             return Pel::fmt('Extension %d', 8);
         case self::JPG9:
             return Pel::fmt('Extension %d', 9);
         case self::JPG10:
             return Pel::fmt('Extension %d', 10);
         case self::JPG11:
             return Pel::fmt('Extension %d', 11);
         case self::JPG12:
             return Pel::fmt('Extension %d', 12);
         case self::JPG13:
             return Pel::fmt('Extension %d', 13);
         case self::COM:
             return Pel::tra('Comment');
         default:
             return Pel::fmt('Unknown marker: 0x%02X', $m);
     }
 }