Exemplo n.º 1
0
 /** 
  * Функция наложения водяного текстового знака на изображение
  * 
  * @return bool
  */
 static function textWatermark()
 {
     // текст водяного знака
     $text = CONF_FILES_IMG_WATERMARK_TEXT;
     // файл шрифта
     $font = 'core/fonts/' . CONF_FILES_IMG_WATERMARK_FONT;
     if (!@file_exists($font)) {
         self::setError(ERROR_FILE_NOT_FOUND_FONT);
         return false;
     }
     // Если кодировка не windows-1251 преобразовуем текст в юникод
     if (strtolower(CONF_DEFAULT_CHARSET) === 'windows-1251') {
         $text = strings::WinToUtf8($text);
         //$text = strings::Utf8ToWin($text);
     }
     // создем дескриптор изображения
     if (!($resImg = self::createImgFromFile())) {
         self::setError(ERROR_FILE_CREATE_WATERMARK);
         return false;
     }
     // получаем обрамляющий бокс водяного знака
     $wmBox = @ImageTtfbBox(CONF_FILES_IMG_WATERMARK_FONT_SIZE, 0, $font, $text);
     // получаем размеры загруженного изображения и размер водяного знака
     $srcWidth = @ImageSX($resImg);
     $srcHeight = @ImageSY($resImg);
     $wmWidth = abs($wmBox[2]);
     $wmHeight = abs($wmBox[5]);
     // если водяной знак больше изображения, оставляем без водяного знака
     if ($srcWidth < $wmWidth) {
         return true;
     }
     // определяем координаты размещения водяного знака
     $margin = 10;
     $alignment = explode(':', CONF_FILES_IMG_WATERMARK_ALIGNMENT);
     // если вдруг расположение получено не правильно, устанавливаем значение по дефолту
     if (count($alignment) != 2) {
         $alignment = array(0 => 'L', 1 => 'B');
     }
     // определяем координату X
     switch ($alignment[0]) {
         case 'L':
         default:
             $x = $margin;
             break;
         case 'C':
             $x = (int) abs($srcWidth / 2 - $wmWidth / 2 + $margin);
             break;
         case 'R':
             $x = (int) abs($srcWidth - $wmWidth - $margin);
             break;
     }
     // определяем координату Y
     switch ($alignment[1]) {
         case 'T':
         default:
             $y = $margin + 30;
             break;
         case 'M':
             $y = (int) abs($srcHeight / 2 - $wmHeight / 2 + $margin);
             break;
         case 'B':
         default:
             $y = (int) abs($srcHeight - $wmHeight - $margin);
             break;
     }
     // определяем цвет текста
     $rgb = strings::colorHexToDec(CONF_FILES_IMG_WATERMARK_FONT_COLOR);
     $txt_color = ImageColorAllocateAlpha($resImg, $rgb[0], $rgb[1], $rgb[2], CONF_FILES_IMG_WATERMARK_TRANSPARENT);
     // накладываем водяную марку на изображение
     @ImageTtfText($resImg, CONF_FILES_IMG_WATERMARK_FONT_SIZE, 0, $x, $y, $txt_color, $font, $text);
     // сохраняем результат в файл
     if (!self::saveImgToFile($resImg, self::$arrImgSubj['full_path'])) {
         self::setError(ERROR_FILE_CREATE_WATERMARK);
         return false;
     }
     // уничтожаем дескриптор
     @ImageDestroy($resImg);
     return true;
 }