From 28a7a653d37bc2210a8acce80a978ca3b640d8b2 Mon Sep 17 00:00:00 2001 From: Jean-Yves Gaulier Date: Wed, 17 Feb 2016 16:55:47 +0100 Subject: [PATCH] #PHRAS-987 1h PNG-Subdefs (port from 3.8) --- composer.json | 2 +- .../Phrasea/Filesystem/FilesystemService.php | 23 ++++++++++++++++++- lib/Alchemy/Phrasea/Media/Subdef/Image.php | 5 +++- lib/classes/databox/subdef.php | 3 +++ 4 files changed, 30 insertions(+), 3 deletions(-) diff --git a/composer.json b/composer.json index 0ea69c8241..a73ff2607c 100644 --- a/composer.json +++ b/composer.json @@ -66,7 +66,7 @@ "justinrainbow/json-schema": "~1.3", "league/flysystem": "^1.0", "league/flysystem-aws-s3-v2": "^1.0", - "media-alchemyst/media-alchemyst": "~0.4", + "media-alchemyst/media-alchemyst": "^0.5", "monolog/monolog": "~1.3", "mrclay/minify": "~2.1.6", "neutron/process-manager": "2.0.x-dev@dev", diff --git a/lib/Alchemy/Phrasea/Filesystem/FilesystemService.php b/lib/Alchemy/Phrasea/Filesystem/FilesystemService.php index 1ec7c39880..bbe1c32ab9 100644 --- a/lib/Alchemy/Phrasea/Filesystem/FilesystemService.php +++ b/lib/Alchemy/Phrasea/Filesystem/FilesystemService.php @@ -151,7 +151,7 @@ class FilesystemService { switch ($spec->getType()) { case SpecificationInterface::TYPE_IMAGE: - return 'jpg'; + return $this->getExtensionFromImageCodec($spec->getImageCodec()); case SpecificationInterface::TYPE_ANIMATION: return 'gif'; case SpecificationInterface::TYPE_AUDIO: @@ -186,6 +186,27 @@ class FilesystemService return null; } + /** + * Get the extension from imageCodec + * + * @param string $imageCodec + * + * @return string + */ + protected function getExtensionFromImageCodec($imageCodec) + { + switch ($imageCodec) { + case 'tiff': + return 'tif'; + case 'jpeg': + return 'jpg'; + case 'png': + return 'png'; + } + + return null; + } + /** * Get the extension from videocodec * diff --git a/lib/Alchemy/Phrasea/Media/Subdef/Image.php b/lib/Alchemy/Phrasea/Media/Subdef/Image.php index 30f76f8437..441f156b21 100644 --- a/lib/Alchemy/Phrasea/Media/Subdef/Image.php +++ b/lib/Alchemy/Phrasea/Media/Subdef/Image.php @@ -21,6 +21,7 @@ class Image extends Provider const OPTION_STRIP = 'strip'; const OPTION_QUALITY = 'quality'; const OPTION_FLATTEN = 'flatten'; + const OPTION_ICODEC = 'icodec'; protected $options = []; @@ -33,6 +34,7 @@ class Image extends Provider $this->registerOption(new OptionType\Boolean($this->translator->trans('Remove ICC Profile'), self::OPTION_STRIP, false)); $this->registerOption(new OptionType\Boolean($this->translator->trans('Flatten layers'), self::OPTION_FLATTEN, false)); $this->registerOption(new OptionType\Range($this->translator->trans('Quality'), self::OPTION_QUALITY, 0, 100, 75)); + $this->registerOption(new OptionType\Enum('Image Codec', self::OPTION_ICODEC, array('jpeg', 'png', 'tiff'), 'jpeg')); } public function getType() @@ -42,7 +44,7 @@ class Image extends Provider public function getDescription() { - return $this->translator->trans('Generates a Jpeg image'); + return $this->translator->trans('Generates an image'); } public function getMediaAlchemystSpec() @@ -54,6 +56,7 @@ class Image extends Provider $size = $this->getOption(self::OPTION_SIZE)->getValue(); $resolution = $this->getOption(self::OPTION_RESOLUTION)->getValue(); + $this->spec->setImageCodec($this->getOption(self::OPTION_ICODEC)->getValue()); $this->spec->setResizeMode(ImageSpecification::RESIZE_MODE_INBOUND_FIXEDRATIO); $this->spec->setDimensions($size, $size); $this->spec->setQuality($this->getOption(self::OPTION_QUALITY)->getValue()); diff --git a/lib/classes/databox/subdef.php b/lib/classes/databox/subdef.php index cd46f04714..78dda05862 100644 --- a/lib/classes/databox/subdef.php +++ b/lib/classes/databox/subdef.php @@ -124,6 +124,9 @@ class databox_subdef { $image = new Image($this->translator); + if ($sd->icodec) { + $image->setOptionValue(Image::OPTION_ICODEC, (string) $sd->icodec); + } if ($sd->size) { $image->setOptionValue(Image::OPTION_SIZE, (int) $sd->size); }