Как я могу повторить водяной знак на протяжении всего запрошенного изображения с помощью PHP?


Я пытаюсь добавить водяной знак ко всем изображениям в каталоге, скажем www.example.com/private некоторые из этих изображений имеют большое разрешение, в то время как другие относительно нормальны, так что на данный момент мой водяной знак отлично работает для небольших изображений. Даже центрируя водяной знак, я все равно оставляю желаемые участки больших изображений уязвимыми для обрезки.

Итак, мой вопрос заключается в том, как бы я написал php-скрипт, чтобы повторить водяной знак по всему изображению, как по вертикали и горизонтали? Я действительно не знаю достаточно о разработке бэк-энда, за исключением того, что я знаю, что это необходимо для обеспечения адекватной защиты водяных знаков, поэтому я искал в google и мог найти только это http://www.regardadesign.co.uk/blog/post/php-image-manipulation/15 , который не работает.

Пока я разместил следующее .файл htaccess в директорию / private:

<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .(gif|jpeg|jpg|png)$ /admin/watermark.php [QSA,NC]
</ifModule>"

И это сценарий в watermark.php файл:

<?php
ini_set('memory_limit','200M');
$path = $_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI'];
$image = imagecreatefromstring(file_get_contents($path));
$w = imagesx($image);
$h = imagesy($image);
$watermark = imagecreatefrompng('watermark.png');
$ww = imagesx($watermark);
$wh = imagesy($watermark);
imagecopy($image, $watermark, (($w/2)-($ww/2)), (($h/2)-($wh/2)), 0, 0, $ww, $wh);
header('Content-type: image/jpeg');
imagejpeg($image);
imagedestroy($image);
imagedestroy($watermark);
exit();
?>
1 3

1 ответ:

Это происходит потому, что вы вставляете водяной знак только один раз. Если вы повторите водяной знак вдоль области изображения, это сделает трюк.

Замените строку imagecopy на следующую:

$img_paste_x = 0;
while($img_paste_x < $w){
    $img_paste_y = 0;
    while($img_paste_y < $h){
        imagecopy($image, $watermark, $img_paste_x, $img_paste_y, 0, 0, $ww, $wh);
        $img_paste_y += $wh;
    }
    $img_paste_x += $ww;
}