From b0000800e182301f87bfaa7c662ee7f875d02b6a Mon Sep 17 00:00:00 2001 From: Olivier Paroz Date: Sat, 4 Oct 2014 17:50:12 +0200 Subject: [PATCH] New generic class for Imagemagick conversions --- config/config.sample.php | 5 +- lib/private/mimetypes.list.php | 2 + lib/private/preview.php | 8 ++- lib/private/preview/bitmap.php | 117 +++++++++++++++++++++++++++++++++ lib/private/preview/pdf.php | 48 -------------- lib/private/preview/tiff.php | 48 -------------- 6 files changed, 128 insertions(+), 100 deletions(-) create mode 100644 lib/private/preview/bitmap.php delete mode 100644 lib/private/preview/pdf.php delete mode 100644 lib/private/preview/tiff.php diff --git a/config/config.sample.php b/config/config.sample.php index 88a52be033..48f0af9c99 100755 --- a/config/config.sample.php +++ b/config/config.sample.php @@ -303,7 +303,10 @@ $CONFIG = array( * - OC\Preview\SVG * - OC\Preview\Movies * - OC\Preview\PDF - * - OC\Preview\Tiff + * - OC\Preview\TIFF + * - OC\Preview\Illustrator + * - OC\Preview\Postscript + * - OC\Preview\Photoshop */ 'enabledPreviewProviders' => array( 'OC\Preview\Image', diff --git a/lib/private/mimetypes.list.php b/lib/private/mimetypes.list.php index a44ec1daa1..4f11829859 100644 --- a/lib/private/mimetypes.list.php +++ b/lib/private/mimetypes.list.php @@ -61,6 +61,7 @@ return array( 'dv' => array('video/dv', null), 'eot' => array('application/vnd.ms-fontobject', null), 'epub' => array('application/epub+zip', null), + 'eps' => array('application/postscript', null), 'exe' => array('application/x-ms-dos-executable', null), 'flac' => array('audio/flac', null), 'flv' => array('video/x-flv', null), @@ -120,6 +121,7 @@ return array( 'ppt' => array('application/vnd.ms-powerpoint', null), 'pptm' => array('application/vnd.ms-powerpoint.presentation.macroEnabled.12', null), 'pptx' => array('application/vnd.openxmlformats-officedocument.presentationml.presentation', null), + 'ps' => array('application/postscript', null), 'psd' => array('application/x-photoshop', null), 'py' => array('text/x-python', null), 'rar' => array('application/x-rar-compressed', null), diff --git a/lib/private/preview.php b/lib/private/preview.php index c93f5d5516..4b21e32403 100755 --- a/lib/private/preview.php +++ b/lib/private/preview.php @@ -19,11 +19,10 @@ use OCP\Files\NotFoundException; require_once 'preview/image.php'; require_once 'preview/movies.php'; require_once 'preview/mp3.php'; -require_once 'preview/pdf.php'; require_once 'preview/svg.php'; require_once 'preview/txt.php'; require_once 'preview/office.php'; -require_once 'preview/tiff.php'; +require_once 'preview/bitmap.php'; class Preview { //the thumbnail folder @@ -691,7 +690,10 @@ class Preview { * - OC\Preview\SVG * - OC\Preview\Movies * - OC\Preview\PDF - * - OC\Preview\Tiff + * - OC\Preview\TIFF + * - OC\Preview\Illustrator + * - OC\Preview\Postscript + * - OC\Preview\Photoshop */ if(empty(self::$enabledProviders)) { self::$enabledProviders = \OC::$server->getConfig()->getSystemValue('enabledPreviewProviders', array( diff --git a/lib/private/preview/bitmap.php b/lib/private/preview/bitmap.php new file mode 100644 index 0000000000..748a63a6af --- /dev/null +++ b/lib/private/preview/bitmap.php @@ -0,0 +1,117 @@ +toTmpFile($path); + + //create imagick object from bitmap or vector file + try{ + // Layer 0 contains either the bitmap or + // a flat representation of all vector layers + $bp = new Imagick($tmpPath . '[0]'); + + $bp->setImageFormat('png'); + } catch (\Exception $e) { + \OC_Log::write('core', $e->getmessage(), \OC_Log::ERROR); + return false; + } + + unlink($tmpPath); + + //new bitmap image object + $image = new \OC_Image($bp); + //check if image object is valid + return $image->valid() ? $image : false; + } + + } + + if(count($checkImagick->queryFormats('PDF')) === 1) { + + //.pdf + class PDF extends Bitmap { + + public function getMimeType() { + return '/application\/pdf/'; + } + + } + + \OC\Preview::registerProvider('OC\Preview\PDF'); + } + + if(count($checkImagick->queryFormats('TIFF')) === 1) { + + //.tiff + class TIFF extends Bitmap { + + public function getMimeType() { + return '/image\/tiff/'; + } + + } + + \OC\Preview::registerProvider('OC\Preview\TIFF'); + } + + if(count($checkImagick->queryFormats('AI')) === 1) { + + //.ai + class Illustrator extends Bitmap { + + public function getMimeType() { + return '/application\/illustrator/'; + } + + } + + \OC\Preview::registerProvider('OC\Preview\Illustrator'); + } + + // Requires adding 'eps' => array('application/postscript', null), to lib/private/mimetypes.list.php + if(count($checkImagick->queryFormats('EPS')) === 1) { + + //.eps + class Postscript extends Bitmap { + + public function getMimeType() { + return '/application\/postscript/'; + } + + } + + \OC\Preview::registerProvider('OC\Preview\Postscript'); + } + + if(count($checkImagick->queryFormats('PSD')) === 1) { + + //.psd + class Photoshop extends Bitmap { + + public function getMimeType() { + return '/application\/x-photoshop/'; + } + + } + + \OC\Preview::registerProvider('OC\Preview\Photoshop'); + } +} diff --git a/lib/private/preview/pdf.php b/lib/private/preview/pdf.php deleted file mode 100644 index 4b88b1a31e..0000000000 --- a/lib/private/preview/pdf.php +++ /dev/null @@ -1,48 +0,0 @@ -queryFormats('PDF')) === 1) { - - class PDF extends Provider { - - public function getMimeType() { - return '/application\/pdf/'; - } - - public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview) { - $tmpPath = $fileview->toTmpFile($path); - - //create imagick object from pdf - try{ - $pdf = new Imagick($tmpPath . '[0]'); - $pdf->setImageFormat('jpg'); - } catch (\Exception $e) { - \OC_Log::write('core', $e->getmessage(), \OC_Log::ERROR); - return false; - } - - unlink($tmpPath); - - //new image object - $image = new \OC_Image($pdf); - //check if image object is valid - return $image->valid() ? $image : false; - } - - } - - \OC\Preview::registerProvider('OC\Preview\PDF'); - } -} diff --git a/lib/private/preview/tiff.php b/lib/private/preview/tiff.php deleted file mode 100644 index c435ec7135..0000000000 --- a/lib/private/preview/tiff.php +++ /dev/null @@ -1,48 +0,0 @@ -queryFormats('TIFF')) === 1) { - - class TIFF extends Provider { - - public function getMimeType() { - return '/image\/tiff/'; - } - - public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview) { - $tmpPath = $fileview->toTmpFile($path); - - //create imagick object from TIFF - try{ - $tiff = new Imagick($tmpPath); - $tiff->setImageFormat('png'); - } catch (\Exception $e) { - \OC_Log::write('core', $e->getmessage(), \OC_Log::ERROR); - return false; - } - - unlink($tmpPath); - - //new image object - $image = new \OC_Image($tiff); - //check if image object is valid - return $image->valid() ? $image : false; - } - - } - - \OC\Preview::registerProvider('OC\Preview\TIFF'); - } -}