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
}
/** * @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()); } }
/** * {@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())); }
/** * 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()); }
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; }
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); }
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; }
/** * 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()); }
protected function getReader() { $logger = new Logger('Test'); $logger->pushHandler(new NullHandler()); return Reader::create($logger); }