/** * Функция наложения водяного текстового знака на изображение * * @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; }