From 865fb8092b1d197e68574e301c88c1cd4f61ccdf Mon Sep 17 00:00:00 2001 From: Simon L Date: Wed, 8 Mar 2023 17:45:12 +0100 Subject: [PATCH] imaginary - fix autorotate and improve the logic Signed-off-by: Simon L --- lib/private/Preview/Imaginary.php | 65 +++++++++++++++---------------- 1 file changed, 32 insertions(+), 33 deletions(-) diff --git a/lib/private/Preview/Imaginary.php b/lib/private/Preview/Imaginary.php index 5d559b65f0009..ca46383e58b01 100644 --- a/lib/private/Preview/Imaginary.php +++ b/lib/private/Preview/Imaginary.php @@ -82,8 +82,14 @@ public function getCroppedThumbnail(File $file, int $maxX, int $maxY, bool $crop $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 @@ public function getCroppedThumbnail(File $file, int $maxX, int $maxY, bool $crop 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', [