PHP, MySQL, bazy danych, programowanie, skrypty, internet, strony www, PHP.org.pl

 Szukaj:  

 » php.org.pl ver. 1.1 final

Menu...

PHP, MySQL, bazy danych, programowanie, skrypty, internet, strony www, PHP.org.pl
PHP, MySQL, bazy danych, programowanie, skrypty, internet, strony www, PHP.org.pl
PHP, MySQL, bazy danych, programowanie, skrypty, internet, strony www, PHP.org.pl
PHP, MySQL, bazy danych, programowanie, skrypty, internet, strony www, PHP.org.pl
PHP, MySQL, bazy danych, programowanie, skrypty, internet, strony www, PHP.org.pl
PHP, MySQL, bazy danych, programowanie, skrypty, internet, strony www, PHP.org.pl
PHP, MySQL, bazy danych, programowanie, skrypty, internet, strony www, PHP.org.pl
PHP, MySQL, bazy danych, programowanie, skrypty, internet, strony www, PHP.org.pl
PHP, MySQL, bazy danych, programowanie, skrypty, internet, strony www, PHP.org.pl
PHP, MySQL, bazy danych, programowanie, skrypty, internet, strony www, PHP.org.pl
PHP, MySQL, bazy danych, programowanie, skrypty, internet, strony www, PHP.org.pl

 

NewsLetter...

Twój mail:

Twoje imię:

 

Sonda...


Jak podoba Ci się ta strona?

bardzo fajna
średnia
słaba
totalne dno

» Znak wodny
Można się czasami spotkać w sieci z galeriami, które do swoich zbiorów dodają znak wodny. Mówiąc o takim znaku mam na myśli napis lub jakieś logo w którymś z rogów pliku graficznego. W poniższym tekście postaram się wytłumaczyć jak zrobić coś takiego w php.

Jedyną rzeczą, jaka jest nam potrzebna jest moduł GD. Wbrew pozorom jest to bardzo proste, i opanowanie tego powinno Wam zajęć nie więcej niż kilkanaście minut.

Do tego wszytkiego będzie nam potrzebny tylko kilka funkcji. Oto one:
imagecreatefrom*( $sciezka ) - do otwarcia pliku końcówki jpeg, gif lub png
imagesx( $image ) - szerokość pliku
imagesy( $image ) - wysokość pliku
imagecopy() - główna funkcja operująca

Pierwsza z omawianych funkcji jest uzależniona od typu pliku jaki używamy i może to być imagecreatefromjpeg bądĽ imagecreatefromgif lub imagecreatefrompng. Teraz trzeba stworzyć odpowienią funkcję.


<?php

$znaczek
= "images/znak.gif";
$pozycja = "tl"; // lewy górny róg
$pozycja = "tr"; // prawy górny róg
$pozycja = "bl"; // lewy dolny róg
$pozycja = "br"; // prawy dolny róg

function znaczek($plik,$pozycja)
{
global
$znaczek;

$image1 = imagecreatefromgif( $znaczek ); // importujemy plik gif ze znakiem
$image2 = imagecreatefromjpeg( $plik ); // otwieramy plik jpg, na którym ma być naklejony znaczek
$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 == "tl" )
{
$od_x = 0;
$od_y = 0;
}
if(
$pozycja == "tr" )
{
$od_x = $plik_w - $znaczek_w;
$od_y = 0;
}
if(
$pozycja == "bl" )
{
$od_x = 0;
$od_y = $plik_h - $znaczek_h;
}
if(
$pozycja == "br" )
{
$od_x = $plik_w - $znaczek_w;
$od_y = $plik_h - $znaczek_h;
}

imagecopy( $image2, $image1, $od_x, $od_y, 0, 0, $znaczek_w, $znaczek_h );
imagejpeg( $image2 );
imagedestroy( $image1 );
imagedestroy( $image2 );

}

header( "Content-type: image/jpg" );
znaczek("images/tp/tapeta.jpg","br");
?>
Gdyby nie opcja wybierania pozycji znaku funkcja wyglądałaby bardzo skromnie, ale byłaby mniej funkcjonalna ;). Zmienne $od_x i $od_y to punkty, od których ma być wklejony znak. Troszkę dziwna jest składnia funkcji imagecopy, ale myślę że da się do niej przyzwyczaić ;). Mianowicie przekazaliśmy do funkcji następujące atrybuty:
imagecopy( $image2, $image1, $od_x, $od_y, 0, 0, $znaczek_w, $znaczek_h );
$image2 - jest to obazek, na który ma być wklejony drugi plik ( $image1 ). Obrazek zostanie umieszczony w punktach $od_x i $od_y. Kolejna para atrybutów - 0 i 0 - $znaczek_w i $znaczek_h - są to rozmiary pliku, który ma być wklejony. Podając takie atrybuty, jak wyżej skopiujemy cały znaczek.

Pozostaje nam jeszcze odpowienio skonfigurować serwer - tak aby nie pozwalał na otwieranie plików graficznych ani katalogu z naszą galerią. Zależnie od konfiguracji serwera możemy umieścić odpowiednie dane w pliku .htaccess lub httpd.conf - w jednym i drugim przypadku będzie wyglądać to tak samo.


<Directory ["sciezka/do/galerii/"]>
Deny from all
<Files ~ "^\.(jpg|gif|png)">
Deny from all
</Files>
</Directory>
Jak widzicie macie folder, w którym znajdują się obrazki. Oglądanie go z poziomu przeglądarki jest zabronione, podobnie jak i obrazków. Serwer nawet nie zastanawia się, co zrobić, gdy tylko zostanie wysłane żądanie do pliku gif, jpg bądĽ png wywala ostrzeżenie o braku dostępu. Pamiętajcie - gdy używacie plików htaccess nie musicie wpisywać pełnej scieżki. Wystarczy umieścić plik w katalogu nadrzędnym do galerii i wpisać <Directory "obrazki/">. Jeżli plik leży między grafikami nie wpisujcie ścieżki - zostawcie samo <Directory>.
Jeżeli wasz host pozwala umieścić jakieś pliki ponad katalogiem strony (czyli po zalogowaniu na ftp macie katalog np. www, w którym są dopiero pliki waszej witryny) to nie musicie się babrać w plikach .htaccess .

Mam nadzieję, że nieco wyjaśniłem Wam istotę sprawy drodzy czytelnicy. Przy okazji zahaczyliśmy o konfigurację serwera, no po prostu cudnie ;). Miłego znaczkowania!

Splatch  

 
 
Wszelkie prawa zastrzeżone php.org.pl 2005.