- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/lib/File/Image/Imagick.php
- Класс: BitrixMainFileImageImagick
- Вызов: Imagick::drawTextWatermark
public function drawTextWatermark(TextWatermark $watermark)
{
if($this->image === null)
{
return false;
}
$font = $watermark->getFont();
if(!file_exists($font))
{
return false;
}
$utfText = $watermark->getUtfText();
$width = $this->getWidth();
$height = $this->getHeight();
$draw = new ImagickDraw();
$draw->setFont($font);
$draw->setFillColor(new ImagickPixel($watermark->getColor()->toRgba()));
if(($textWidth = $watermark->getWidth()) > 0)
{
$draw->setFontSize(20);
$metrics = $this->image->queryFontMetrics($draw, $utfText);
$scale = 1.0;
if($metrics["textWidth"] > 0)
{
$scale = $textWidth / $metrics["textWidth"];
}
$fontSize = 20 * $scale;
$draw->setFontSize($fontSize);
$position = new Rectangle($textWidth, $metrics["textHeight"] * $scale);
}
else
{
//in GD resolution is 96 dpi, we should increase size
$fontSize = $watermark->getFontSize($width) * (96/72);
$draw->setFontSize($fontSize);
$metrics = $this->image->queryFontMetrics($draw, $utfText);
$position = new Rectangle($metrics["textWidth"], $metrics["textHeight"]);
}
$watermark->alignPosition($width, $height, $position);
$fontSize *= (72/90); //back to pixels
if($watermark->getVerticalAlignment() == Watermark::ALIGN_BOTTOM)
{
//Try to take into consideration font's descenders.
//Coordinates in annotateImage are for font's *baseline*.
//Let the descenders be 20% of the font size.
$descender = $fontSize * 0.2;
$y = $position->getY() + $position->getHeight() - $descender; //baseline
}
else
{
$y = $position->getY() + $fontSize;
}
return $this->image->annotateImage($draw, $position->getX(), $y, 0, $utfText);
}