Оказывается, что реализовать watermark на PHP, в виде полупрозрачного текста достаточно просто, нужно только вспомнить школьную геометрию и немного разобраться с GD2.
Чтобы нарисовать прозрачный текст под углом можно использовать функцию imagettftext, которая получает в качестве y-координаты некий baseline, координаты которого можно рассчитать с помощью функции imagettfbbox.
В отличии от PHP Watermark реализованного через наложение полупрозрачного изображения, текстовый watermark работает только с форматом png, для непрозрачных форматов (jpg, gif и т д), текст получается непрозрачным, поэтому с ними нужно работать через наложение полупрозрачного изображения с помощью функции imagecopy.
Общий watermark для нескольких сайтов
Для того, чтобы использовать один скрипт сразу для нескольких сайтов, можно прописать в конфигурации Apache переменную окружения, которая будет содержать путь к общим скриптам:
<VirtualHost *:80> .... SetEnv SHARED_WWW /home/someuser/shared_www/ </VirtualHost>
после чего значение переменной SHARED_WWW в PHP скрипте можно получить следующим образом:
echo 'SHARED_WWW = ' . $_SERVER["SHARED_WWW"];
теперь вместо относительных путей к шрифтам с крипте watermark-а
$font_dir = $_SERVER['DOCUMENT_ROOT'] . dirname($_SERVER['PHP_SELF']) . "/fonts/";
можно использовать абсолютные
$this->font_dir = $_SERVER["SHARED_WWW"] . "fonts/";
Возможно, более правильным вариантом будет задать переменную окружения в файле /etc/environment:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" SHARED_WWW="/home/someuser/shared_www"
после перезагрузки проверяем, что переменная SHARED_WWW задана для всех пользователей:
$ echo $SHARED_WWW /home/someuser/shared_www
Однако, достучаться до этой переменной из PHP не так то просто. Проще прописать её в файле /etc/apache2/envvars:
export SHARED_WWW=/home/dmitriano/shared_www/
теперь вызов watermark-а из любого сайта выгляди так:
require_once(getenv("SHARED_WWW") . "text-watermark/watermark.php"); $watermark = new TextWatermark(); $watermark->text = "МылоМаг.рф"; $watermark->transparent_font = "83_ReginaKursivIta.ttf"; $watermark->opaque_font = "83_ReginaKursivIta.ttf"; $watermark->text_angle = 24; $watermark->text_alpha = 60; $watermark->font_size = array(96, 48, 12); $watermark->SendRequestedImage();