public function save($image, $file, $type = null, $quality = null, $interlace = false, $permission = 0755)
{
if (null === $type) {
$type = $this->_getImageTypeFromFileName($file);
// Null given, guess type from file extension
if (ImageType::UNKNOWN === $type) {
$type = $image->getType();
// 0 result, use original image type
}
}
$targetDir = dirname($file);
// $file's directory
if (false === is_dir($targetDir)) {
// Check if $file's directory exist
// Create and set default perms to 0755
if (!mkdir($targetDir, $permission, true)) {
throw new \Exception(sprintf('Cannot create %s', $targetDir));
}
}
switch (strtoupper($type)) {
case ImageType::GIF:
$image->getCore()->writeImages($file, true);
// Support animated image. Eg. GIF
break;
case ImageType::PNG:
// PNG is lossless and does not need compression. Although GD allow values 0-9 (0 = no compression), we leave it alone.
$image->getCore()->setImageFormat($type);
$image->getCore()->writeImage($file);
break;
default:
// Defaults to jpeg
$quality = $quality === null ? 75 : $quality;
// Default to 75 (GDs default) if null.
$quality = $quality > 100 ? 100 : $quality;
$quality = $quality <= 0 ? 1 : $quality;
// Note: If 0 change it to 1. The lowest quality in Imagick is 1 whereas in GD its 0.
if ($interlace) {
$image->getCore()->setImageInterlaceScheme(\Imagick::INTERLACE_JPEG);
}
$image->getCore()->setImageFormat($type);
$image->getCore()->setImageCompression(\Imagick::COMPRESSION_JPEG);
$image->getCore()->setImageCompressionQuality($quality);
$image->getCore()->writeImage($file);
// Single frame image. Eg. JPEG
}
return $this;
}