private function _applyWatermark($imageInstance, $watermark)
{
if (!isset($watermark['image'])) {
throw new Exception(Craft::t('Watermark image property not set'));
}
if (!(isset($watermark['width']) && isset($watermark['width']))) {
throw new Exception(Craft::t('Watermark image size is not set'));
}
$paths = new Imager_ImagePathsModel($watermark['image']);
$watermarkInstance = $this->imagineInstance->open($paths->sourcePath . $paths->sourceFilename);
$watermarkInstance->resize(new \Imagine\Image\Box($watermark['width'], $watermark['height']), \Imagine\Image\ImageInterface::FILTER_UNDEFINED);
if (isset($watermark['position'])) {
$position = $watermark['position'];
if (isset($position['top'])) {
$posY = intval($position['top']);
} else {
if (isset($position['bottom'])) {
$posY = $imageInstance->getSize()->getHeight() - intval($watermark['height']) - intval($position['bottom']);
} else {
$posY = $imageInstance->getSize()->getHeight() - intval($watermark['height']) - 10;
}
}
if (isset($position['left'])) {
$posX = intval($position['left']);
} else {
if (isset($position['right'])) {
$posX = $imageInstance->getSize()->getWidth() - intval($watermark['width']) - intval($position['right']);
} else {
$posX = $imageInstance->getSize()->getWidth() - intval($watermark['width']) - 10;
}
}
} else {
$posY = $imageInstance->getSize()->getHeight() - intval($watermark['height']) - 10;
$posX = $imageInstance->getSize()->getWidth() - intval($watermark['width']) - 10;
}
$positionPoint = new \Imagine\Image\Point($posX, $posY);
if ($this->imageDriver == 'imagick') {
$watermarkImagick = $watermarkInstance->getImagick();
if (isset($watermark['opacity'])) {
$watermarkImagick->evaluateImage(\Imagick::EVALUATE_MULTIPLY, floatval($watermark['opacity']), \Imagick::CHANNEL_ALPHA);
}
if (isset($watermark['blendMode']) && isset(ImagerService::$compositeKeyTranslate[$watermark['blendMode']])) {
$blendMode = ImagerService::$compositeKeyTranslate[$watermark['blendMode']];
} else {
$blendMode = \Imagick::COMPOSITE_ATOP;
}
$imageInstance->getImagick()->compositeImage($watermarkImagick, $blendMode, $positionPoint->getX(), $positionPoint->getY());
} else {
// it's GD :(
$imageInstance->paste($watermarkInstance, $positionPoint);
}
}