diff options
author | Simon L <szaimen@e.mail.de> | 2023-02-05 16:44:27 +0100 |
---|---|---|
committer | Simon L <szaimen@e.mail.de> | 2023-02-08 00:25:18 +0100 |
commit | 112d516f27a0cb752e464d103dda0ba324983e3e (patch) | |
tree | f499174f8dee4dc750341018e5ec8ceaff75d4be /lib | |
parent | 2ddd7f52bfe4fc586fbb993b9eaf58a8b1d0f471 (diff) | |
download | nextcloud-server-112d516f27a0cb752e464d103dda0ba324983e3e.tar.gz nextcloud-server-112d516f27a0cb752e464d103dda0ba324983e3e.zip |
imaginary - allow to generate heif, pdf and svg thumbnails
Signed-off-by: Simon L <szaimen@e.mail.de>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/private/Preview/Imaginary.php | 63 |
1 files changed, 45 insertions, 18 deletions
diff --git a/lib/private/Preview/Imaginary.php b/lib/private/Preview/Imaginary.php index 0d75dbd7069..5d559b65f00 100644 --- a/lib/private/Preview/Imaginary.php +++ b/lib/private/Preview/Imaginary.php @@ -57,7 +57,7 @@ class Imaginary extends ProviderV2 { } public static function supportedMimeTypes(): string { - return '/image\/(bmp|x-bitmap|png|jpeg|gif|heic|svg|tiff|webp)/'; + return '/(image\/(bmp|x-bitmap|png|jpeg|gif|heic|heif|svg\+xml|tiff|webp)|application\/(pdf|illustrator))/'; } public function getCroppedThumbnail(File $file, int $maxX, int $maxY, bool $crop): ?IImage { @@ -81,33 +81,60 @@ class Imaginary extends ProviderV2 { $httpClient = $this->service->newClient(); + $convert = false; + switch ($file->getMimeType()) { case 'image/gif': case 'image/png': $mimeType = 'png'; break; + case 'image/svg+xml': + case 'application/pdf': + case 'application/illustrator': + $convert = true; + break; default: $mimeType = 'jpeg'; } - $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, + if ($convert) { + $operations = [ + [ + 'operation' => 'convert', + 'params' => [ + 'type' => 'png', + ] + ], + [ + 'operation' => ($crop ? 'smartcrop' : 'fit'), + 'params' => [ + 'width' => $maxX, + 'height' => $maxY, + 'type' => 'png', + 'norotation' => 'true', + ] ] - ] - ]; + ]; + } 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, + ] + ] + ]; + } try { $response = $httpClient->post( |