]> source.dussan.org Git - nextcloud-server.git/commitdiff
imaginary - fix autorotate and improve the logic 37155/head
authorSimon L <szaimen@e.mail.de>
Wed, 8 Mar 2023 16:45:12 +0000 (17:45 +0100)
committerbackportbot-nextcloud[bot] <backportbot-nextcloud[bot]@users.noreply.github.com>
Thu, 9 Mar 2023 22:25:57 +0000 (22:25 +0000)
Signed-off-by: Simon L <szaimen@e.mail.de>
lib/private/Preview/Imaginary.php

index 5d559b65f0009d1ce5be30219fc0f35fdfae36da..ca46383e58b01708a0dbc93bd96385f8b3a16872 100644 (file)
@@ -82,8 +82,14 @@ class Imaginary extends ProviderV2 {
                $httpClient = $this->service->newClient();
 
                $convert = false;
+               $autorotate = true;
 
                switch ($file->getMimeType()) {
+                       case 'image/heic':
+                               // Autorotate seems to be broken for Heic so disable for that
+                               $autorotate = false;
+                               $mimeType = 'jpeg';
+                               break;
                        case 'image/gif':
                        case 'image/png':
                                $mimeType = 'png';
@@ -92,50 +98,43 @@ class Imaginary extends ProviderV2 {
                        case 'application/pdf':
                        case 'application/illustrator':
                                $convert = true;
+                               // Converted files do not need to be autorotated
+                               $autorotate = false;
+                               $mimeType = 'png';
                                break;
                        default:
                                $mimeType = 'jpeg';
                }
+               
+               $operations = [];
 
                if ($convert) {
-                       $operations = [
-                               [
-                                       'operation' => 'convert',
-                                       'params' => [
-                                               'type' => 'png',
-                                       ]
-                               ],
-                               [
-                                       'operation' => ($crop ? 'smartcrop' : 'fit'),
-                                       'params' => [
-                                               'width' => $maxX,
-                                               'height' => $maxY,
-                                               'type' => 'png',
-                                               'norotation' => 'true',
-                                       ]
+                       $operations[] = [
+                               'operation' => 'convert',
+                               'params' => [
+                                       'type' => $mimeType,
                                ]
                        ];
-               } else {
-                       $quality = $this->config->getAppValue('preview', 'jpeg_quality', '80');
-
-                       $operations = [
-                               [
-                                       'operation' => 'autorotate',
-                               ],
-                               [
-                                       'operation' => ($crop ? 'smartcrop' : 'fit'),
-                                       'params' => [
-                                               'width' => $maxX,
-                                               'height' => $maxY,
-                                               'stripmeta' => 'true',
-                                               'type' => $mimeType,
-                                               'norotation' => 'true',
-                                               'quality' => $quality,
-                                       ]
-                               ]
+               } elseif ($autorotate) {
+                       $operations[] = [
+                               'operation' => 'autorotate',
                        ];
                }
 
+               $quality = $this->config->getAppValue('preview', 'jpeg_quality', '80');
+
+               $operations[] = [
+                       'operation' => ($crop ? 'smartcrop' : 'fit'),
+                       'params' => [
+                               'width' => $maxX,
+                               'height' => $maxY,
+                               'stripmeta' => 'true',
+                               'type' => $mimeType,
+                               'norotation' => 'true',
+                               'quality' => $quality,
+                       ]
+               ];
+
                try {
                        $response = $httpClient->post(
                                $imaginaryUrl . '/pipeline', [