diff options
Diffstat (limited to 'lib/private/Metadata/Provider/ExifProvider.php')
-rw-r--r-- | lib/private/Metadata/Provider/ExifProvider.php | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/lib/private/Metadata/Provider/ExifProvider.php b/lib/private/Metadata/Provider/ExifProvider.php new file mode 100644 index 00000000000..91c858f6794 --- /dev/null +++ b/lib/private/Metadata/Provider/ExifProvider.php @@ -0,0 +1,51 @@ +<?php + +namespace OC\Metadata\Provider; + +use OC\Metadata\FileMetadata; +use OC\Metadata\IMetadataProvider; +use OCP\Files\File; + +class ExifProvider implements IMetadataProvider { + public static function groupsProvided(): array { + return ['size']; + } + + public static function isAvailable(): bool { + return extension_loaded('exif'); + } + + public function execute(File $file): array { + $fileDescriptor = $file->fopen('rb'); + $data = @exif_read_data($fileDescriptor, 'ANY_TAG', true); + + $size = new FileMetadata(); + $size->setGroupName('size'); + $size->setId($file->getId()); + $size->setMetadata([]); + + if (!$data) { + return [ + 'size' => $size, + ]; + } + + if (array_key_exists('COMPUTED', $data) + && array_key_exists('Width', $data['COMPUTED']) + && array_key_exists('Height', $data['COMPUTED']) + ) { + $size->setMetadata([ + 'width' => $data['COMPUTED']['Width'], + 'height' => $data['COMPUTED']['Height'], + ]); + } + + return [ + 'size' => $size, + ]; + } + + public static function getMimetypesSupported(): string { + return '/image\/.*/'; + } +} |