• Модуль: 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);
}