Исходный код файла «.htaccess»
DirectoryIndex index.php
<FilesMatch "\.(gif|jpg|jpeg|png)$">
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.*)$ /watermark/_watermark.php [T=application/x-httpd-php,L,QSA]
</FilesMatch>
Исходный код файла «_watermark.php»
<?php
waterMark($_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI']);
function waterMark($original)
{
$original = urldecode($original);
$info_o = @getImageSize($original);
if (!$info_o)
return false;
$info_w = @getImageSize('watermark.png');
if (!$info_w)
return false;
header("Content-Type: ".$info_o['mime']);
$original = @imageCreateFromString(file_get_contents($original));
$watermark = @imagecreatefrompng("watermark.png");
$out = imageCreateTrueColor($info_o[0],$info_o[1]);
imageCopyMerge($out, $original, 0, 0, 0, 0, $info_o[0], $info_o[1], 100);
// Водяной знак накладываем только на изображения больше 250 пикселей по вертикали и по горизонтали
if( ($info_o[0] > 250) && ($info_o[1] > 250) )
{
// Для изображений без альфа-канала
// Последний параметр функции - степень непрозрачности водяного знака
imageCopyMerge($out, $watermark, ($info_o[0]-$info_w[0])/2, ($info_o[1]-$info_w[1])/2, 0, 0, $info_w[0], $info_w[1], 25);
// Для изображений с альфа-каналом
// В этом случае прозрачность регулируется альфа-каналом самого изображения
// imageCopy($out, $watermark, ($info_o[0]-$info_w[0])/2, ($info_o[1]-$info_w[1])/2, 0, 0, $info_w[0], $info_w[1]);
}
switch ($info_o[2])
{
case 1:
imageGIF($out);
break;
case 2:
imageJPEG($out);
break;
case 3:
imagePNG($out);
break;
default:
return false;
}
imageDestroy($out);
imageDestroy($original);
imageDestroy($watermark);
return true;
}
>
Решение сводится к следующему, в каталог с файлами изображений помещается файл «.htaccess». Кроме него на сервере создается папка «watermark», в которой находится файл скрипта «_watermark.php» и собственно файл водяного знака «watermark.png».
При этом мною, по сравнению с оригинальной версией, встреченной в интернете, были внесены незначительные изменения в оба текстовых файла.
В файл «.htaccess», в регулярное выражение поиска файлов изображений добавлено расширение «jpeg», как тоже часто встречающееся.
Скрипт «_watermark.php» переработан таким образом, чтобы помещать водяной знак по центру изображения (этого требовала специфика решаемой задачи) и добавлена возможность регулировать прозрачность создаваемого водяного знака (комментарии в теле скрипта помогут Вам самостоятельно настроить этот параметр).
Также следует обратить внимание на тот факт, что помещая папку «watermark» в папку с изображениями, как советуют оригинальные источники, мы не добьемся желаемого результата, т.к. в этом случае нам придется иметь в каждой папке свой собственный файл «.htaccess» и папку «watermark». Это связано с тем, что в файле «.htaccess» указываются абсолютные пути от корневого каталога сайта к файлу «_watermark.php». Таким образом, имея в каждой папке с изображениями отдельную подпапку «watermark», в случае необходимости изменить водяной знак (либо скрипт, накладывающий его на изображение), нам придется произвести изменения во всех папках.
