/** * Get save options. * * @param int|null $quality * @param string $extension * @return array */ private function _getSaveOptions($quality = null, $extension = null) { // Because it's possible for someone to set the quality to 0. $quality = ($quality === null || $quality === false ? $this->_quality : $quality); $extension = (!$extension ? $this->getExtension() : $extension); switch ($extension) { case 'jpeg': case 'jpg': { return array('jpeg_quality' => $quality, 'flatten' => true); } case 'gif': { $options = array('animated' => $this->_isAnimatedGif); if ($this->_isAnimatedGif) { // Imagine library does not provide this value and arbitrarily divides it by 10, when assigning, // so we have to improvise a little $options['animated.delay'] = $this->_image->getImagick()->getImageDelay() * 10; } return $options; } case 'png': { // Valid PNG quality settings are 0-9, so normalize and flip, because we're talking about compression // levels, not quality, like jpg and gif. $normalizedQuality = round(($quality * 9) / 100); $normalizedQuality = 9 - $normalizedQuality; if ($normalizedQuality < 0) { $normalizedQuality = 0; } if ($normalizedQuality > 9) { $normalizedQuality = 9; } $options = array('png_compression_level' => $normalizedQuality, 'flatten' => false); $pngInfo = ImageHelper::getPngImageInfo($this->_imageSourcePath); // Even though a 2 channel PNG is valid (Grayscale with alpha channel), Imagick doesn't recognize it as // a valid format: http://www.imagemagick.org/script/formats.php // So 2 channel PNGs get converted to 4 channel. if (is_array($pngInfo) && isset($pngInfo['channels']) && $pngInfo['channels'] !== 2) { $format = 'png'.(8 * $pngInfo['channels']); } else { $format = 'png32'; } $options['png_format'] = $format; return $options; } default: { return array(); } } }
/** * Get save options. * * @param int|null $quality * @param string $extension * @return array */ private function _getSaveOptions($quality = null, $extension = null) { // Because it's possible for someone to set the quality to 0. $quality = $quality === null || $quality === false ? $this->_quality : $quality; $extension = !$extension ? $this->getExtension() : $extension; switch ($extension) { case 'jpeg': case 'jpg': return array('jpeg_quality' => $quality, 'flatten' => true); case 'gif': $options = array('animated' => $this->_isAnimatedGif); return $options; case 'png': // Valid PNG quality settings are 0-9, so normalize and flip, because we're talking about compression // levels, not quality, like jpg and gif. $normalizedQuality = round($quality * 9 / 100); $normalizedQuality = 9 - $normalizedQuality; if ($normalizedQuality < 0) { $normalizedQuality = 0; } if ($normalizedQuality > 9) { $normalizedQuality = 9; } $options = array('png_compression_level' => $normalizedQuality, 'flatten' => false); $pngInfo = ImageHelper::getPngImageInfo($this->_imageSourcePath); // Even though a 2 channel PNG is valid (Grayscale with alpha channel), Imagick doesn't recognize it as // a valid format: http://www.imagemagick.org/script/formats.php // So 2 channel PNGs get converted to 4 channel. if (is_array($pngInfo) && isset($pngInfo['channels']) && $pngInfo['channels'] !== 2) { $format = 'png' . 8 * $pngInfo['channels']; } else { $format = 'png32'; } $options['png_format'] = $format; return $options; default: return array(); } }