It scans files and directories, and provide an iterator on the FileEntities generated based on the results. Example usage: $Reader = new Reader(); $Reader->in('/path/to/directory') ->exclude('tests') ->extensions(array('jpg', 'xml)); Throws an exception if no file found $first = $Reader->first(); Returns null if no file found $first = $Reader->getOneOrNull(); foreach($Reader as $entity) { Do your logic with FileEntity }
Author: Romain Neutron (imprec@gmail.com)
Inheritance: implements IteratorAggregate
 /**
  * @covers MediaVorus\MediaCollection::match
  */
 public function testMatch()
 {
     $logger = new Logger('test');
     $logger->pushHandler(new NullHandler());
     $mediavorus = new MediaVorus(Reader::create($logger), Writer::create($logger), FFProbe::create());
     $collection = $mediavorus->inspectDirectory(__DIR__ . '/../../files/');
     $audio = $collection->match(new MediaType(MediaInterface::TYPE_AUDIO));
     $this->assertInstanceOf('\\Doctrine\\Common\\Collections\\ArrayCollection', $audio);
     $this->assertGreaterThan(0, $audio->count());
     foreach ($audio as $audio) {
         $this->assertEquals(MediaInterface::TYPE_AUDIO, $audio->getType());
     }
     $notAudio = $collection->match(new MediaType(MediaInterface::TYPE_AUDIO), true);
     $this->assertGreaterThan(0, $notAudio->count());
     $this->assertInstanceOf('\\Doctrine\\Common\\Collections\\ArrayCollection', $notAudio);
     foreach ($notAudio as $audio) {
         $this->assertFalse(MediaInterface::TYPE_AUDIO === $audio->getType());
     }
 }
Example #2
0
 /**
  * {@inheritdoc}
  */
 public function read($filename)
 {
     $meta = new ValueBag();
     try {
         $fileEntity = $this->reader->reset()->files($filename)->first();
     } catch (\Exception $e) {
         return $meta;
     }
     if ($fileEntity->getMetadatas()->containsKey('File:ImageWidth')) {
         $meta->set('image.width', new MetaValue((int) $fileEntity->getMetadatas()->get('File:ImageWidth')->getValue()->asString()));
     } elseif ($fileEntity->getMetadatas()->containsKey('PNG:ImageWidth')) {
         $meta->set('image.width', new MetaValue((int) $fileEntity->getMetadatas()->get('PNG:ImageWidth')->getValue()->asString()));
     }
     if ($fileEntity->getMetadatas()->containsKey('File:ImageHeight')) {
         $meta->set('image.height', new MetaValue((int) $fileEntity->getMetadatas()->get('File:ImageHeight')->getValue()->asString()));
     } elseif ($fileEntity->getMetadatas()->containsKey('PNG:ImageHeight')) {
         $meta->set('image.height', new MetaValue((int) $fileEntity->getMetadatas()->get('PNG:ImageHeight')->getValue()->asString()));
     }
     foreach ($fileEntity->getMetadatas() as $metadata) {
         /* @var $metadata Metadata */
         if (ValueInterface::TYPE_BINARY === $metadata->getValue()->getType()) {
             continue;
         }
         $groupName = $metadata->getTag()->getGroupName();
         $name = $metadata->getTag()->getName();
         $value = (string) $metadata->getValue();
         if ($groupName === 'System' || !ctype_print($value)) {
             continue;
         }
         $path = "{$groupName}.{$name}";
         $meta->set($path, new MetaValue($value));
     }
     return $meta;
 }
 /**
  * @covers PHPExiftool\Reader::ignoreDotFiles
  * @covers PHPExiftool\Reader::all
  */
 public function testIgnoreDotFiles()
 {
     $this->object->in(self::$tmpDir . '3');
     $this->assertEquals(1, count($this->object->all()));
     $this->object->ignoreDotFiles()->in(self::$tmpDir . '3');
     $this->assertEquals(0, count($this->object->all()));
 }
Example #4
0
 /**
  * Instantiate mediavorus to register the mime types
  */
 public function setUp()
 {
     parent::setUp();
     $logger = new Logger('test');
     $logger->pushHandler(new NullHandler());
     $mediavorus = new MediaVorus(Reader::create($logger), Writer::create($logger), FFProbe::create());
 }
Example #5
0
 public function setUp()
 {
     if (!class_exists('PHPExiftool\\Reader')) {
         $this->markTestSkipped('PHPExiftool\\Reader not available.');
     }
     $logger = $this->prophesize('Monolog\\Logger');
     $logger->addInfo(Argument::cetera());
     $this->reader = new ExiftoolReader(Reader::create($logger->reveal()));
 }
 public function setUp()
 {
     parent::setUp();
     $logger = new Logger('Tests');
     $logger->pushHandler(new NullHandler());
     $reader = Reader::create($logger);
     $writer = Writer::create($logger);
     $file = __DIR__ . '/../../../files/ExifTool.jpg';
     $this->object = new DefaultMedia(new File($file), $reader->reset()->files($file)->first(), $writer);
     $file = __DIR__ . '/../../../files/GPS.jpg';
     $this->GPSobject = new DefaultMedia(new File($file), $reader->reset()->files($file)->first(), $writer);
 }
 /**
  * {@inheritdoc}
  */
 public function extract($filename, Specification $targetFormat)
 {
     if (!file_exists($filename)) {
         return null;
     }
     $metadatas = $this->reader->files($filename)->first();
     $imageFilename = $this->tempDir . '/' . uniqid() . '.jpg';
     foreach ($metadatas->getMetadatas() as $metadata) {
         if ($metadata->getTag()->getName() !== 'Picture' && ValueInterface::TYPE_BINARY !== $metadata->getValue()->getType()) {
             continue;
         }
         $filesystem = new Filesystem();
         if (!$filesystem->exists($this->tempDir)) {
             $filesystem->mkdir($this->tempDir);
         }
         $content = (string) $metadata->getValue()->asString();
         $filesystem->dumpFile($imageFilename, $content);
         return $imageFilename;
     }
     return null;
 }
Example #8
0
 public function setUp()
 {
     parent::setUp();
     $logger = new Logger('Tests');
     $logger->pushHandler(new NullHandler());
     $this->reader = Reader::create($logger);
     $this->writer = Writer::create($logger);
     $file = __DIR__ . '/../../../files/ExifTool.jpg';
     $this->object = new Image(new File($file), $this->reader->reset()->files($file)->first(), $this->writer);
     $logger = new Logger('test');
     $logger->pushHandler(new NullHandler());
     $this->ffprobe = FFProbe::create();
     $this->mediavorus = new MediaVorus($this->reader, $this->writer, $this->ffprobe);
 }
Example #9
0
 public function process()
 {
     if (!$this->target) {
         $this->modx->log(1, 'target is empty');
         return false;
     }
     $logger = new Logger('exiftool');
     $reader = Reader::create($logger);
     $metadatas = $reader->files($this->target)->first();
     foreach ($metadatas as $metadata) {
         if (ValueInterface::TYPE_BINARY === $metadata->getValue()->getType()) {
             $this->output .= sprintf("\t--> Field %s has binary datas" . PHP_EOL, $metadata->getTag());
         } else {
             $this->output .= sprintf("\t--> Field %s has value(s) %s" . PHP_EOL, $metadata->getTag(), $metadata->getValue()->asString());
         }
     }
     return $this->output;
 }
Example #10
0
 /**
  * Create MediaVorus
  *
  * @return MediaVorus
  */
 public static function create()
 {
     $logger = new Logger('MediaVorus');
     $logger->pushHandler(new NullHandler());
     return new static(Reader::create($logger), Writer::create($logger), FFProbe::create(array(), $logger));
 }
 /**
  * @covers PHPExiftool\Writer::write
  */
 public function testWriteInPlaceErased()
 {
     $metadatas = new Driver\Metadata\MetadataBag();
     $metadatas->add(new Driver\Metadata\Metadata(new Driver\Tag\IPTC\ObjectName(), new Driver\Value\Mono('Beautiful Object')));
     $metadatas->add(new Driver\Metadata\Metadata(new Driver\Tag\IPTC\ObjectName(), new Driver\Value\Mono('Beautiful Object')));
     $metadatas->add(new Driver\Metadata\Metadata(new Driver\Tag\XMPIptcExt\PersonInImage(), new Driver\Value\Multi(array('Romain', 'Nicolas'))));
     $this->object->erase(true);
     $changedFiles = $this->object->write($this->inPlace, $metadatas);
     $this->assertEquals(1, $changedFiles);
     $reader = new Reader($this->getExiftool(), new RDFParser());
     $metadatasRead = $reader->files($this->inPlace)->first()->getMetadatas();
     $this->assertLessThan(50, count($metadatasRead));
     $this->assertEquals('Beautiful Object', $metadatasRead->get('IPTC:ObjectName')->getValue()->asString());
     $this->assertEquals(array('Romain', 'Nicolas'), $metadatasRead->get('XMP-iptcExt:PersonInImage')->getValue()->asArray());
 }
Example #12
0
 protected function getReader()
 {
     $logger = new Logger('Test');
     $logger->pushHandler(new NullHandler());
     return Reader::create($logger);
 }