diff --git a/composer.json b/composer.json index 94f86c76f0..9ece8abf32 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 653ac83a1e..e64ca7fb08 100644 --- a/lib/classes/databox/subdef.php +++ b/lib/classes/databox/subdef.php @@ -107,8 +107,6 @@ class databox_subdef $this->subdef_type = $this->buildFlexPaperSubdef($sd); break; } - - return $this; } /** @@ -289,13 +287,16 @@ class databox_subdef /** * Build Image Subdef object depending the SimpleXMLElement * - * @param SimpleXMLElement $sd - * @return \Alchemy\Phrasea\Media\Subdef\Video + * @param SimpleXMLElement $sd + * @return Image */ protected function buildImageSubdef(SimpleXMLElement $sd) { $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); } @@ -318,8 +319,8 @@ class databox_subdef /** * Build Audio Subdef object depending the SimpleXMLElement * - * @param SimpleXMLElement $sd - * @return \Alchemy\Phrasea\Media\Subdef\Video + * @param SimpleXMLElement $sd + * @return Audio */ protected function buildAudioSubdef(SimpleXMLElement $sd) { @@ -352,8 +353,8 @@ class databox_subdef /** * Build GIF Subdef object depending the SimpleXMLElement * - * @param SimpleXMLElement $sd - * @return \Alchemy\Phrasea\Media\Subdef\Video + * @param SimpleXMLElement $sd + * @return Gif */ protected function buildGifSubdef(SimpleXMLElement $sd) { @@ -372,8 +373,8 @@ class databox_subdef /** * Build Video Subdef object depending the SimpleXMLElement * - * @param SimpleXMLElement $sd - * @return \Alchemy\Phrasea\Media\Subdef\Video + * @param SimpleXMLElement $sd + * @return Video */ protected function buildVideoSubdef(SimpleXMLElement $sd) {