• Welcome to Forum graficzne Burning-Brushes.pl. Please log in or sign up.
 

Znak wodny w PHP

Zaczęty przez Kaczy, Styczeń 29, 2011, 15:03:54

Poprzedni wątek - Następny wątek
Nie lubicie jak ktoś kradnie z waszego serwisu obrazki? A pojedyncze edytowanie obrazków jest męczące? Jest na to rada! Opiszę tu jak zrobić bardzo prosty znak wodny ;)

Najpierw musimy wiedzieć jakie są oznaczenia pozycji, w których może się znajdować znak wodny:
lg - lewy górny róg
pg - prawy górny róg
ld - lewy dolny róg
pd - prawy dolny róg

Następnie tworzymy plik znak.php:


<?php
$znaczek 
"adres do obrazka znaku wodnego, koniecznie gif";
function 
znaczek($plik,$pozycja)
{
global 
$znaczek;

$image1 imagecreatefromgif$znaczek ); // importujemy plik gif ze znakiem
$nazwa_pliku $_GET['obraz'];

$rozszerzenie strtolower(substr($nazwa_pliku,strrpos($nazwa_pliku,".")+1));
if (
$rozszerzenie == 'jpg'$image2 imagecreatefromjpeg$plik ); // otwieramy plik jpg, na którym ma być naklejony znaczek
else if ($rozszerzenie == 'gif'$image2 imagecreatefromgif$plik );
else if (
$rozszerzenie == 'png'$image2 imagecreatefrompng$plik );
$plik_w imagesx$image2 ); // szerokość pliku
$plik_h imagesy$image2 ); // wysokość pliku
$znaczek_w imagesx$image1 ); // szerokość znaczka
$znaczek_h imagesy$image1 ); // wysokość znaczka

if( $pozycja == "lg" )
{
$od_x 0;
$od_y 0;
}
if( 
$pozycja == "pg" )
{
$od_x $plik_w $znaczek_w;
$od_y 0;
}
if( 
$pozycja == "ld" )
{
$od_x 0;
$od_y $plik_h $znaczek_h;
}
if( 
$pozycja == "pd" )
{
$od_x $plik_w $znaczek_w;
$od_y $plik_h $znaczek_h;
}

imagecopy$image2$image1$od_x$od_y00$znaczek_w$znaczek_h );
imagegif$image2 );
imagedestroy$image1 );
imagedestroy$image2 );

}

$nazwa_pliku $_GET['obraz'];

$rozszerzenie strtolower(substr($nazwa_pliku,strrpos($nazwa_pliku,".")+1));
if (
$rozszerzenie == 'jpg'$typ='jpg';
else if (
$rozszerzenie == 'gif'$typ='gif';
else if (
$rozszerzenie == 'png'$typ='png';
header"Content-type: image/".$typ );
header("Content-Disposition: attachment; filename=\"screen.".$typ."\"");
znaczek($_GET['obraz'],"jedna z pozycji, która wymieniliśmy wcześniej, np. pd");
?>


Ostatnim krokiem jest wyświetlenie obrazka ;)


<img src="domena.pl/znak.php?obraz=adres do obrazka">


Dla bardziej zaawansowanych polecam ModRewrite ;)


I to już koniec ;) oto sposób jak w łatwy sposób choć trochę zabezpieczyć się przed złodziejami obrazków ;)

Witam,
wiem, że zadam głupie pytania, ale jak to mówią, kto pyta nie błądzi:

- $plik - trzeba go jakoś zdefiniować?
- adres dla $znaczek - wpisać w "" coś typu: "http://www.domena.pl/images/znaczek.gif"?
- imagesx($image1) - tu trzba wpisać konkretną liczbę?
- jak działa header?

Z góry dziękuję za odpowiedź.

1.
Cytat: luku83 w Styczeń 29, 2012, 18:19:10- $plik - trzeba go jakoś zdefiniować?
nie wiem czy dobrze zrozumiałem pytanie
spójrz na linijkę trzecią... tam jest definicja funkcji, której pierwszym parametrem jest zmienna $plik, więc samego pliku jako taki nie definiujesz, a jedynie przekazujesz do tej funkcji jako parametr.
z resztą wywołanie tej funkcji możesz zauważyć w linijce numer 55 (przed ostatnia)... nazwa obrazka jest pobierana z globalnej tablicy asjocjacyjnej $_GET, w której umieszczone są zmienne z zapytania HTTP (tu jest np. zmienna o nazwie "obrazek")

2.
Cytatadres dla $znaczek - wpisać w "" coś typu: "http://www.domena.pl/images/znaczek.gif"?
tak : p

3.
Cytatimagesx($image1) - tu trzba wpisać konkretną liczbę?
nie
imagesx to funkcja, która zwraca z tego co widzę szerokość obrazu, który przymuje jako parametr.
w tym skrypcie pod zmienną $image1 zapisywany jest ten znak wodny, i to jego rozmiar jest tutaj ustalany... jak wstawisz tam cyferkę to skrypt w ogóle nie powinien działać

4.
Cytat: luku83 w Styczeń 29, 2012, 18:19:10jak działa header?
header dodaje po prostu podaną opcję do nagłówka odpowiedzi HTTP

ja generalnie nie znam się na php, więc mam nadzieję, że jakoś sensownie rozwiałem Twoje wątpliwości : p

Dzięki za odpowiedź, ale jeszcze nie wszystko jest jasne.

- $_GET['obraz'] - czy zamiast tego mogę podłożyć $_FILES['photo']['name'] (uploadowany plik z formularza)?

- czy ten skrypt zawiera od razu informację, gdzie jest zapisywane zdjęcie ze znakiem wodnym, czy dopiero mam użyć move_uploaded_file() ?

Cytat: luku83 w Styczeń 30, 2012, 13:11:23$_GET['obraz'] - czy zamiast tego mogę podłożyć $_FILES['photo']['name'] (uploadowany plik z formularza)?
tego nie jestem pewny, ale powinno to działać
z tym, że nie koniecznie bo $_FILES['photo']['name'] zawiera chyba tylko nazwę pliku, a nie wiem czy $_GET['obraz'] nie jest jakiegoś typu wskaźnikiem, ale chyba też jest tylko nazwą, więc powinno działać

Cytat: luku83 w Styczeń 30, 2012, 13:11:23czy ten skrypt zawiera od razu informację, gdzie jest zapisywane zdjęcie ze znakiem wodnym, czy dopiero mam użyć move_uploaded_file() ?
z tego co widzę to zdjęcie ze znakiem wodnym jest zapisywane dokładnie tam gdzie zdjęcie bez znaku (gdzieś na serwerze gdzie jest ten plik)

Heh, właśnie tego szukałem,
Będzie można było dodać to do hostingu obrazków :D