Я пытаюсь добавить водяной знак ко всем изображениям в каталоге, скажем, 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(); ?>
Это происходит потому, что вы вставляете водяной знак только один раз. Если вы повторите водяной знак вдоль области изображения, он сделает трюк.
Замените вашу линию 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; }