From 4ac3ecace2a285b954967ebe7de8d7ef54c4b655 Mon Sep 17 00:00:00 2001 From: Georg Ehrke Date: Mon, 23 Sep 2013 09:45:36 +0200 Subject: [PATCH 1/8] use svg to generate filetype icon if imagick available --- lib/private/preview/unknown.php | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/lib/private/preview/unknown.php b/lib/private/preview/unknown.php index 9e6cd68d40..9c1d41bef5 100644 --- a/lib/private/preview/unknown.php +++ b/lib/private/preview/unknown.php @@ -20,7 +20,22 @@ class Unknown extends Provider { $path = \OC_Helper::mimetypeIcon($mimetype); $path = \OC::$SERVERROOT . substr($path, strlen(\OC::$WEBROOT)); - return new \OC_Image($path); + if (extension_loaded('imagick')) { + $path = substr_replace($path, 'png', -3); + $content = file_get_contents($path); + + $svg = new \Imagick(); + $svg->setBackgroundColor(new \ImagickPixel('transparent')); + $svg->readImageBlob($content); + $svg->setImageFormat('png32'); + + $image = new \OC_Image(); + $image->loadFromData($svg); + } else { + $image = new \OC_Image($path); + } + + return $image; } } From d410faf11c57172bdf9d618a71e4aaf9640867c0 Mon Sep 17 00:00:00 2001 From: Georg Ehrke Date: Mon, 23 Sep 2013 15:33:16 +0200 Subject: [PATCH 2/8] fix new extension --- lib/private/preview/unknown.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/private/preview/unknown.php b/lib/private/preview/unknown.php index 9c1d41bef5..fa2d4980a8 100644 --- a/lib/private/preview/unknown.php +++ b/lib/private/preview/unknown.php @@ -21,7 +21,7 @@ class Unknown extends Provider { $path = \OC::$SERVERROOT . substr($path, strlen(\OC::$WEBROOT)); if (extension_loaded('imagick')) { - $path = substr_replace($path, 'png', -3); + $path = substr_replace($path, 'svg', -3); $content = file_get_contents($path); $svg = new \Imagick(); @@ -39,4 +39,4 @@ class Unknown extends Provider { } } -\OC\Preview::registerProvider('OC\Preview\Unknown'); \ No newline at end of file +\OC\Preview::registerProvider('OC\Preview\Unknown'); From f81053072ffcbb0346f9a7cebb1585718df0f6f0 Mon Sep 17 00:00:00 2001 From: Georg Ehrke Date: Mon, 23 Sep 2013 16:00:14 +0200 Subject: [PATCH 3/8] use readImage instead of readImageBlob --- lib/private/preview/unknown.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/private/preview/unknown.php b/lib/private/preview/unknown.php index fa2d4980a8..59667a7752 100644 --- a/lib/private/preview/unknown.php +++ b/lib/private/preview/unknown.php @@ -22,11 +22,10 @@ class Unknown extends Provider { if (extension_loaded('imagick')) { $path = substr_replace($path, 'svg', -3); - $content = file_get_contents($path); $svg = new \Imagick(); $svg->setBackgroundColor(new \ImagickPixel('transparent')); - $svg->readImageBlob($content); + $svg->readImage($path); $svg->setImageFormat('png32'); $image = new \OC_Image(); From 8a35d79a39e06229859f13d141215b443f76baa7 Mon Sep 17 00:00:00 2001 From: Georg Ehrke Date: Wed, 25 Sep 2013 10:39:15 +0200 Subject: [PATCH 4/8] check if svg of filetype icon exists --- lib/private/preview/unknown.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/private/preview/unknown.php b/lib/private/preview/unknown.php index 59667a7752..722bb727f5 100644 --- a/lib/private/preview/unknown.php +++ b/lib/private/preview/unknown.php @@ -20,9 +20,9 @@ class Unknown extends Provider { $path = \OC_Helper::mimetypeIcon($mimetype); $path = \OC::$SERVERROOT . substr($path, strlen(\OC::$WEBROOT)); - if (extension_loaded('imagick')) { - $path = substr_replace($path, 'svg', -3); + $svgPath = substr_replace($path, 'svg', -3); + if (extension_loaded('imagick') && file_exists($svgPath)) { $svg = new \Imagick(); $svg->setBackgroundColor(new \ImagickPixel('transparent')); $svg->readImage($path); From 3b5dc51be4493451b61feb1c5dc4a7eb396b7050 Mon Sep 17 00:00:00 2001 From: Georg Ehrke Date: Wed, 25 Sep 2013 10:41:09 +0200 Subject: [PATCH 5/8] fix doc block of OC\Preview\Provider::getThumbnail() --- lib/private/preview/provider.php | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/lib/private/preview/provider.php b/lib/private/preview/provider.php index e4a730bafc..65d09705f4 100644 --- a/lib/private/preview/provider.php +++ b/lib/private/preview/provider.php @@ -11,9 +11,15 @@ abstract class Provider { abstract public function getMimeType(); /** - * search for $query - * @param string $query - * @return + * get thumbnail for file at path $path + * @param string $path Path of file + * @param int $maxX The maximum X size of the thumbnail. It can be smaller depending on the shape of the image + * @param int $maxY The maximum Y size of the thumbnail. It can be smaller depending on the shape of the image + * @param bool $scalingUp Disable/Enable upscaling of previews + * @param object $fileview fileview object of user folder + * @return mixed + * false if no preview was generated + * OC_Image object of the preview */ abstract public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview); } From e078fc3eda708d2182740935f468f93f1efa6815 Mon Sep 17 00:00:00 2001 From: Georg Ehrke Date: Wed, 25 Sep 2013 13:11:32 +0200 Subject: [PATCH 6/8] fix wrong variable name --- lib/private/preview/unknown.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/private/preview/unknown.php b/lib/private/preview/unknown.php index 722bb727f5..91c73c670f 100644 --- a/lib/private/preview/unknown.php +++ b/lib/private/preview/unknown.php @@ -25,7 +25,7 @@ class Unknown extends Provider { if (extension_loaded('imagick') && file_exists($svgPath)) { $svg = new \Imagick(); $svg->setBackgroundColor(new \ImagickPixel('transparent')); - $svg->readImage($path); + $svg->readImage($svgPath); $svg->setImageFormat('png32'); $image = new \OC_Image(); From be4aea2d1b5215a014ab4ae78ea0aa5ea076b48c Mon Sep 17 00:00:00 2001 From: Morris Jobke Date: Mon, 7 Oct 2013 13:21:20 +0200 Subject: [PATCH 7/8] fix indentation --- lib/private/preview/unknown.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/private/preview/unknown.php b/lib/private/preview/unknown.php index 91c73c670f..62444ac6a2 100644 --- a/lib/private/preview/unknown.php +++ b/lib/private/preview/unknown.php @@ -23,13 +23,13 @@ class Unknown extends Provider { $svgPath = substr_replace($path, 'svg', -3); if (extension_loaded('imagick') && file_exists($svgPath)) { - $svg = new \Imagick(); - $svg->setBackgroundColor(new \ImagickPixel('transparent')); - $svg->readImage($svgPath); - $svg->setImageFormat('png32'); + $svg = new \Imagick(); + $svg->setBackgroundColor(new \ImagickPixel('transparent')); + $svg->readImage($svgPath); + $svg->setImageFormat('png32'); - $image = new \OC_Image(); - $image->loadFromData($svg); + $image = new \OC_Image(); + $image->loadFromData($svg); } else { $image = new \OC_Image($path); } From 19ea4f79da63f640678c7eae0511f342ea2474b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Fri, 11 Oct 2013 00:12:37 +0200 Subject: [PATCH 8/8] resize svg without loosing quality --- lib/private/preview/unknown.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/private/preview/unknown.php b/lib/private/preview/unknown.php index 62444ac6a2..4747f9e25e 100644 --- a/lib/private/preview/unknown.php +++ b/lib/private/preview/unknown.php @@ -23,7 +23,15 @@ class Unknown extends Provider { $svgPath = substr_replace($path, 'svg', -3); if (extension_loaded('imagick') && file_exists($svgPath)) { + + // http://www.php.net/manual/de/imagick.setresolution.php#85284 $svg = new \Imagick(); + $svg->readImage($svgPath); + $res = $svg->getImageResolution(); + $x_ratio = $res['x'] / $svg->getImageWidth(); + $y_ratio = $res['y'] / $svg->getImageHeight(); + $svg->removeImage(); + $svg->setResolution($maxX * $x_ratio, $maxY * $y_ratio); $svg->setBackgroundColor(new \ImagickPixel('transparent')); $svg->readImage($svgPath); $svg->setImageFormat('png32');