Ostatnio borykałem się z dosyć dotkliwym problemem z kradnięciem moich zdjęć z jednego ze swoich serwisów. Myślałem o zablokowaniu hotlinkowania, ale większość gotowych rozwiązań opiera się o regułki .htaccess, które mi nigdy nie działały (nie wiem czemu). Dlatego postanowiłem wdrążyć całkiem inne rozwiązanie, polegające na automatycznym dodawaniu znaku wodnego z logiem strony do każdego zdjęcia, co w efekcie zniechęca wielu amatorów kopiowania czyjejś grafiki, a dodatkowo jest dodatkową reklamą dla strony w przypadku gdy ktoś z takiego zdjęcia skorzysta…. Trochę pogooglowałem i znalazłem prosty i skuteczny skrypt spełniający wszystkie moje wymagania, dlatego też postanowiłem się z wami podzielić i objaśnić proces jego wdrążenia, który jest banalnie prosty.
1. Edytujemy nasz plik .htaccess i dodajemy poniższą regółkę (przykład dla wordpress’a):
RewriteRule ^(.*)wp-content/uploads/(.*) $1watermark.php?src=wp-content/uploads/$2
wp-content/uploads/ – to ścieżka do grafiki w wordpressie, jeżeli korzystacie z innego skryptu to wystarczy że jedynie zmienicie ten kawałek kodu na ścieżkę dostępu waszego katalogu z grafiką.
2. Tworzycie teraz plik watermark.php w katalogu głównym waszej strony i wypełniacie go poniższym skryptem:
[/php]
<?php
$src = $_GET['src'];
header('Content-type: image/jpeg');
//this will prevent the watermark from showing up in the thumbnail images
if (eregi("150x150", $src)) {
$watermark = imagecreatefrompng('empty.png');
} else {
$watermark = imagecreatefrompng('watermark.png');
}
$watermark_width = imagesx($watermark);
$watermark_height = imagesy($watermark);
$image = imagecreatetruecolor($watermark_width, $watermark_height);
if(eregi('.gif',$src)) {
$image = imagecreatefromgif($src);
}
elseif(eregi('.jpeg',$src)||eregi('.jpg',$src)) {
$image = imagecreatefromjpeg($src);
}
elseif(eregi('.png',$src)) {
$image = imagecreatefrompng($src);
}
else {
exit("Your image is not a gif, jpeg or png image. Sorry.");
}
$size = getimagesize($src);
$dest_x = $size[0] - $watermark_width - 0;
$dest_y = $size[1] - $watermark_height - 0;
imagecolortransparent($watermark,imagecolorat($watermark,0,0));
imagecopyresampled($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, $watermark_width, $watermark_height);
imagejpeg($image, "", 95);
imagedestroy($image);
imagedestroy($watermark);
?>
[php]
Zapisujecie plik i dodajecie w głównym katalogu jeszcze 2 pliki graficzne:
watermark.png – z waszym znakiem wodnym
empty.png – obrazek o rozmiarach 1×1px
Możecie też pobrać cały gotowy skrypt wraz z przykładową grafiką: TUTAJ

ale czy mam zmienić obydwie ścieżki w
RewriteRule ^(.*)wp-content/uploads/(.*) $1watermark.php?src=wp-content/uploads/$2
Nic nie zmieniasz, tylko dodajesz tą linijkę.
nie o to chodzi po prostu grafikę mam w folderze images w głównym katalogu i nie wiem którą ścieżkę zmienić
Zmieniasz ścieżkę w regułce mod_rewrite:
RewriteRule ^(.*)images/(.*) $1watermark.php?src=images/$2
Powinno działać.
a u mnie nie działa…. nie korzystam z wordpress tylko z samego katalogu z obrazkami… ktoś może pomóc?
Rzuć więcej informacji, w czym dokładnie masz problem, jakie błędy wyskakują itd.
lol a mnie zniknely wszystkie obrazki
zmienilem wszystko tak jak napisales..
w dodatku jak sprawdzam wlasciwosci obrazka na stronie to wyswietla prawidlowa sciezke do obrazka ale wymiary obrazka to 0×0 lol
dobra juz dziala
jak kopiowalem kod pliku watermark.php skopiowaly mi sie numery linijek
haha
do tego zmienilem sobie pozycje mojego watermarka zmieniajac
$dest_y = $size[1] – $watermark_height – 0;
na
$dest_y = $size[1] – $watermark_height – 80;
dzieki wielkie
Dzięki za skrypt! Działa jak należy
PS. Proszę o kanał RSS na bloga, zapisałbym sobie.
Widzę że ze strony głównej RSS dostępny. Zapisany
Witam,
Mam problem z watermarkiem, bowiem nie pojawia się w załączniku obrazka (po kliknięciu na miniaturkę przenosi na podstronę z grafiką).
Co jest przyczyną i jak to rozwiązać?