summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKate <26026535+provokateurin@users.noreply.github.com>2024-05-15 01:37:16 +0200
committerGitHub <noreply@github.com>2024-05-15 01:37:16 +0200
commitd0fd919eff5035c4322ab3be8fc314bb23995a23 (patch)
tree26ad653ebf720872bfad420cbb4b2c56a71f3bec
parent5408715cb9e52d110fb8b2c63bc2e691a11e499a (diff)
parentd6a5ab073df61883f43989751198f565540d5b82 (diff)
Merge pull request #2479 from nextcloud/backport/2474/stable29v29.0.1rc1
-rw-r--r--lib/AppInfo/Application.php1
-rw-r--r--lib/Listener/SizeMetadataProvider.php16
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],