diff options
author | Kate <26026535+provokateurin@users.noreply.github.com> | 2024-05-15 01:37:16 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-15 01:37:16 +0200 |
commit | d0fd919eff5035c4322ab3be8fc314bb23995a23 (patch) | |
tree | 26ad653ebf720872bfad420cbb4b2c56a71f3bec | |
parent | 5408715cb9e52d110fb8b2c63bc2e691a11e499a (diff) | |
parent | d6a5ab073df61883f43989751198f565540d5b82 (diff) |
Merge pull request #2479 from nextcloud/backport/2474/stable29v29.0.1rc1
-rw-r--r-- | lib/AppInfo/Application.php | 1 | ||||
-rw-r--r-- | lib/Listener/SizeMetadataProvider.php | 16 |
2 files changed, 17 insertions, 0 deletions
diff --git a/lib/AppInfo/Application.php b/lib/AppInfo/Application.php index ecf30fcf..2af980eb 100644 --- a/lib/AppInfo/Application.php +++ b/lib/AppInfo/Application.php @@ -92,6 +92,7 @@ class Application extends App implements IBootstrap { // Metadata $context->registerEventListener(MetadataLiveEvent::class, ExifMetadataProvider::class); $context->registerEventListener(MetadataBackgroundEvent::class, ExifMetadataProvider::class); + // SizeMetadataProvider optionally depends on ExifMetadataProvider, so it has to be registered afterwards $context->registerEventListener(MetadataLiveEvent::class, SizeMetadataProvider::class); $context->registerEventListener(MetadataBackgroundEvent::class, SizeMetadataProvider::class); $context->registerEventListener(MetadataLiveEvent::class, OriginalDateTimeMetadataProvider::class); diff --git a/lib/Listener/SizeMetadataProvider.php b/lib/Listener/SizeMetadataProvider.php index ce01cbf8..4ce62981 100644 --- a/lib/Listener/SizeMetadataProvider.php +++ b/lib/Listener/SizeMetadataProvider.php @@ -67,6 +67,22 @@ class SizeMetadataProvider implements IEventListener { return; } + // The image might have a rotation stored in the EXIF data. + // If that is the case and the rotation is 90/270 degrees the width and height need to be swapped. + // This is necessary because the clients will take the rotation into account when displaying the image. + if ($event->getMetadata()->hasKey('photos-ifd0')) { + $ifd0 = $event->getMetadata()->getArray('photos-ifd0'); + if (array_key_exists('Orientation', $ifd0)) { + /** @var int $orientation */ + $orientation = $ifd0['Orientation']; + + // https://exiftool.org/TagNames/EXIF.html + if ($orientation >= 5) { + $size = [$size[1], $size[0]]; + } + } + } + $event->getMetadata()->setArray('photos-size', [ 'width' => $size[0], 'height' => $size[1], |