Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
Rad sa fajlovima
Dr Nenad Kojić, dipl. inž. Milena Vesić, spec .stuk.inž.
Danijela Nikitin, spec .stuk.inž.
Školska 2017/18. Nikola Mihajlović, spec .stuk.inž.
Luka Lukić, struk. inž.
Visoka škola strukovnih studija za informacione
i komunikacione tehnologije
Preduslovi Ukoliko se želi fajl proslediti od korisnika do servera, putem web
forme, potrebno je u tag form dodati atribut enctype=" "
Vrednost ovog atributa treba podesiti na
enctype="multipart/form-data"
Podrazumevana vrednost ovog atributa je "application/x-www-form-urlencoded" i podrazumeva da se svi karakteri koji se prenose koduju.
Kodovanje se vrši konverzijom karaktera u ASCII HEX vrednosti
Kod vrednosti multipart/form-data nema konverzije pa se podaci prenose u originalu
Atribut enctype= " " se koristi samo kada se kao metod za slanje definiše POST
Samim tim, prilikom upload-a fajlova, limit koji dolazi sa upotrebom POST metoda se prenosi na veličinu fajla koji se upload-uje (8MB)
Preduslovi Ako se pokuša upload većeg fajla od 8MB (8388608) dobiće se greška
slična prikazanoj:
Ako se upload-uje fajl koji ima veličinu veću od 2MB, a manju od 8MB, POST neće unositi ograničenje, ali najčešće web server hoće
Ovo znači da je serversko ograničenje u konfiguraciji PHP-a takvo da unosi svoj maksimalni limit za prihvatanje upload-ovanih fajlova
Ovaj parametar se podešava u fajlu php.ini, u folderu php, u xampp-u i po potrebi se može promeniti.
Warning: POST Content-Length of 10725948 bytes exceeds the limit of 8388608 bytes
in Unknown on line 0
Klijentska strana
Kao zaključak se izvodi da se na klijentskoj strani koja želi korisniku da omogući upload fajlova na server, upotrebom web forme, mora definisati bar jedno polje tipa file, taster tipa submit i atribut enctype.
Pored ovih elemenata forme mogu se pojaviti i drugi u proizvoljnom redosledu i količini
Primer forme
Serverska strana
Web server dobija uploadovani fajl i po pravilu ga smešta u privremeni folder koji je konfiguracijom servera izabran
Ovaj folder je zajednički za sve fajlove koji svi korisnici uploaduju na sajtove hostovane na tom web serveru
Zato je bitno da se odmah nakon prenosa fajla od korisnika na web servere, u privremeni folder, željeni fajl fizički premesti u prostor koji je hostingom dodeljen konkretnom web sajtu i tu trajno skladišti
U xampp-u, ovo se nalazi u php.ini fajlu kao deo:
; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
; http://php.net/upload-tmp-dir
upload_tmp_dir = "\xampp\tmp"
PHP kod
Nakon upload-a fajla, od klijenta na web server, HTTP je svoj deo posla u smislu prenosa fajla završio, kao i web server koji je taj fajl privremeno snimio na privremenu lokaciju na serveru
Da bi programer imao pristup uploadovanom fajlu, koristi se superglobalna promenljiva $_FILES
Ovom promenljivom se omogućava pristup podacima o upload-ovanom fajlu
Kao i kod upotrebe $_POST ili $_GET superglobalnih promenljivih, sintaksa upotrebe $_FILES za pristup prenetom fajlu, čiji je name atribut npr.
<input name="userfile" type="file" id="userfile" />
je
$_FILES['userfile']
$_FILES
Za razliku od $_POST ili $_GET, kojima se dobija poslati string, superglobalna promenljiva $_FILES ima više podataka koji opisuju fajl (ime, tip, veličinu,…) pa kako je sama niz, a u sebi ima niz, to je multidimenzionalni niz
Indeksi niza u ovoj superglobalnoj promenljivoj su unapred definisani, i to su: name, tmp_name, size, type i error
U ovim elementima niza se nalaze podaci o upload-ovanom fajlu i to: njegovo ime sa ekstenzijom, putanja do mesta gde je privremeno smešten na web server, veličina u bajtima, tipa fajla i informacija o grešci, ako se greška desila
Njihovim vrednostima se tako pristupa pomoću
$fileName = $_FILES['userfile']['name'];
$tmpName = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
$fileType = $_FILES['userfile']['type'];
$fileError = $_FILES['userfile']['error'];
$_FILES
Tako za polje forme čiji je name bio userfile, PHP kodom pristupamo i dobijamo informacije o upload-ovanom fajlu, u lokalne promenljive PHP-a
U ovom slučaju to su promenljive $fileName, $tmpName, $fileSize, $fileType i $fileError
Polje za error vraća 1 ako greška postoji Imena ovih promenljivih su proizvoljna
$fileName = $_FILES['userfile']['name'];
$tmpName = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
$fileType = $_FILES['userfile']['type'];
$fileError = $_FILES['userfile']['error'];
Premeštanje fajla
Nakon upload-a fajl se nalazi na privremenoj lokaciji na serveru
Putanja do te lokacije se kodom dobija pomoću
$tmpName = $_FILES['userfile']['tmp_name'];
Sada je potrebno fajl sa te lokacije premestiti u neku drugu lokaciju koja će biti trajna
Ako pretpostavimo da je to folder upload, koji se nalazi u root-u posmatranog hostinga sajta, ovu putanju možemo definisati kao promenljivu
$uploadDir = 'upload/’; Sada je potrebno formirati kompletnu novu putanju (putanja kroz folder
zaključno sa imenom i ekstenzijom fajla) Ako se zadržava postojeće ime i ekstenzija fajla, to se realizuje kao:
$filePath = $uploadDir . $fileName;
Premeštanje fajla
Kada postoji puna putanja do fajla na privremenoj lokaciji
$tmpName = $_FILES['userfile']['tmp_name'];
I kada postoji nova puna putanja kao:
$filePath = $uploadDir . $fileName;
Ostaje da se fajl sa jedne lokacije (privrmene) premesti na trajnu
Ovo se realizuje pomoću funkcije move_uploaded_file();
U konkretnom slučaju, premeštanje se vrši pomoću
$result = move_uploaded_file($tmpName, $filePath);
Promenljiva $result ima vrednost true ili false u zavisnosti da li je premeštanje uspešno realizovano ili ne.
Šta nakon upload-a Nakon uploada fajla na server i premeštanja fajla u željeni folder (npr. upload)
fajl se nalazi u okviru fajlova posmatranog sajta
Da bi se imala evidencije fajlova, njihova imena, tipovi fajlova i sl, ovi podaci se upisuju u bazu podataka, i sve što je potrebno radi se na bazi informacija iz baze, dok se samo fajl fizički skladišti na server
Fajl se može snimiti i u bazu podataka (kao tip BLOB, npr.) ali se ovo ne praktikuje jer povećava veličinu baze, pa samim tim i backup-e, pretragu i sl.
Zato se praktikuje snimanje fajla na server a putanju do istog u bazu, da bi se tačno znalo koji fajlovi postoje i na kojim lokacijama
U prethodnom primeru, fajl se u bazu može upisati nakon njegovog smeštanja u trajni folder tj u deo else{ }
Baza podataka
Baza podataka treba da sadrži tabele koje imaju kolone za sve podatke koji se dohvataju od korisnika
U ovom slučaju postoji samo jedno polje tipa file, pa je kreirana tabela upload_file_server koja ima kolone id, name, type, size i path, kao na slici
Tako će upit kojim se podaci dobijeni o fajlu upisuju kao: $query = "INSERT INTO upload_file_server (name, size, type, path )
VALUES ('$fileName', '$fileSize', '$fileType', '$filePath')";
Ceo kod
<html>
<head><title>Upload File</title></head>
<body>
<?php
$uploadDir = 'upload/';
if(isset($_POST['upload']))
{
$fileName = $_FILES['userfile']['name'];
$tmpName = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
$fileType = $_FILES['userfile']['type'];
$filePath = $uploadDir . $fileName;
$result = move_uploaded_file($tmpName, $filePath);
if (!$result) { echo "Error uploading file"; exit; }
else{
include 'konekcijaZaFile.php';
$fileName = addslashes($fileName);
$filePath = addslashes($filePath);
$query = "INSERT INTO upload_file_server (name, size, type, path ) VALUES ('$fileName', '$fileSize', '$fileType', '$filePath')";
$konekcija->query($query);
echo "<br/>File uploaded";
}
}
?>
<form action="fajlovi.php" method="post" enctype="multipart/form-data" name="uploadform">
<table width="350px">
<tr> <td>
<input name="userfile" type="file" id="userfile" />
</td> <td>
<input name="upload" type="submit" id="upload" value="Upload" />
</td> </tr>
</table>
</form>
</body>
</html>
Ograničenja od strane programera
Često je potrebno ograničiti upload od strane korisnika
Ovo se može uraditi po više kriterijuma, ali su najkorišćeniji ograničenja po veličini tj. težini fajla i tipu fajla
Tako se često za profilnu sliku omogućuje samo slika koja je jpg formata do npr. 1MB ili slično.
Ovo se realizuje kodom na serverskoj strani upotrebom if-a
Npr.
if ($fileSize > 20000) { echo("Fajl je preveliki! Mora biti manji od $maxVelicina MB! <br/>");
}
if($tipFajla != "jpg" && $tipFajlaCovek != "png") {
echo("Fajl mora biti jpg, png ili gif formata!");
}
Prethodni kod za upload sada se može proširiti ovim kodom!
Upload sa ograničenjima
Kod koji je od ranije kada nije bilo ograničenja
Ako je sve u skladu sa ograničenjem ide se na upload fajla
Problem?
Kod svih do sada opisanih upload-a prvo je bio izvršen upload fajla na server, pa njegovo kopiranje iz privremenog u trajni folder i tek tada kada se taj posao okonča upis informacija o fajlu u bazu podataka
Međutim, ako jedan korisnik upload-uje sliku 1.jpg, u folder upload, pa drugi korisnik upload-uje drugu sliku sa istim imenom, u isti folder upload, nova slika će se presnimiti preko prethodne i prethodna će se izgubiti
Da se ovo ne bi dešavalo, fajlovi moraju imati unikatna imena
Ovo može da se postigne na više načina, ali jedan od najlakših je da se fajlovima da ime id-a iz tabele baze koji je autoincrement
Da bi se ovo uradilo, prvo se mora upisati zapis u bazu, pa kada se upiše da se dobije id, koji se koristi za novo ime fajla, pa se tek tada može prekopirati fajl u trajni folder
Ovo zahteva izmenu u opisanom kodu, koja je data u listingu
Za ove potrebe tabela je modifikovana tako da pored ranijih kolona ima i kolonu staroIme, gde se pamti originalno ime fajla
Prvo se upisuje jedan deo podataka u bazu,
bez imena fajla i putanje da bi se dobio id tog zapisa
Dohvatanje id-a poslednjeg zapisa
Određivanje ekstenzije fajla iz imena
Promena imena fajla kao id zapisa
Kopiranje fajla sa novim imenom
Dopuna postojećeg zapisa novim imenom i putanjom
<?php
$uploadDir = 'upload/';
if(isset($_POST['upload']))
{
$fileName = $_FILES['userfile']['name'];
$tmpName = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
$fileType = $_FILES['userfile']['type'];
$staroIme = addslashes($fileName);
include 'konekcijaZaFile.php';
$query = "INSERT INTO upload_file_server (size, type, staroIme ) VALUES ('$fileSize', '$fileType', '$fileName')";
$konekcija->query($query);
$poslednjiId = $konekcija->lastInsertId();
$imeDelici = explode(".", $fileName);
$ekstenzija = end($imeDelici);
$novoImeFajla = $poslednjiId . "." . $ekstenzija;
$filePath = $uploadDir . $novoImeFajla;
$result = move_uploaded_file($tmpName, $filePath);
if (!$result) { echo "Error uploading file"; exit; }
else{
$fileName = addslashes($novoImeFajla);
$query = "UPDATE upload_file_server SET name ='$fileName', path = '$filePath' WHERE id = '$poslednjiId';";
$konekcija->query($query);
echo "<br>File uploaded<br>";
}
}
?>
<html>
<head><title>Upload File sa drugim imenom</title> </head>
<body> <form action="fajlovi1.php" method="post" enctype="multipart/form-data" name="uploadform">
<table width="350px">
<tr>
<td>
<input name="userfile" type="file" id="userfile" />
</td>
<td>
<input name="upload" type="submit" id="upload" value="Upload" />
Kako dohvatiti fajlove sa servera?
Nakon upload-a, logično je da se ti fajlovi nekako, nekada, trebaju prikazati korisniku
Prikaz fajla u samom sajtu je moguć samo u slučaju da browser može da prikaže format tog fajla (jpg, png, gif, pdf, …)
Generalno, kao oblik preuzimanja uploadovanih fajlova sa servera, korisniku se može prikazati spisak linkova, koji predstavljaju npr. imena fajlova koji su na serveru, gde se klikom na neki link sadržaj tog fajla automatski download-uje sa servera na klijentski računar.
Drugi oblik dohvatanja fajlova je njihovo preuzimanje sa servera i prikaz u web strani (za one tipove fajlova koji omogućavaju prikaz u browser-u)
Prikaz fajlova u formi linkova
Zadatak 1.
Kreirati stranicu koja prikazuje spisak uploadovanih fajlova (čitajući ih iz baze podataka) u formi linkova, gde se klikom na neki link sadržaj tog fajla automatski download-uje sa servera na klijentski računar.
Pretpostaviti da su fajlovi uploadovani na server, u folder upload, a podaci o fajlovima smešteni u bazu podataka u tabelu upload_file_server
Zadatak 1. - rešenje Prvi korak je prikazati imena fajlova iz baze u formi linkova
Linkove podesiti da „gađaju“ istu stranicu i prenose podatak id (id zapisa)
Dohvatanje podataka iz baze
Kreiranje dinamičke tabele
Kreiranje dinamičkih linkova
Na ovaj način dobijen je spisak linkova, koji su dinamički kreirani na bazi sadržaja iz tabele
Svaki link ima vidljiv deo kao ime upload-ovanog fajla i atribut href koji ukazuje na istu stranicu (u ovom primeru dohvatanjeBazaAttachment.php) kome se prosleđuje parametar id u kome se nalazi vrednost primarnog ključa za posmatrani zapis
Klikom na link, učitaće se ponovo ista stranica ali sa prosleđenim parametrom id, kao da smo to uradili na sledeći način ručno:
dohvatanjeBazaAttachment.php?id=3
Sada treba dodati kod koji u ovoj strani na bazi prosleđenog id-ja dohvata ranije upload-ovani fajl sa servera i isporučuje ga u formi attachment-a
Rezultat
Zadatak 1. – rešenje dodatak Dohvatanje podataka iz baze
„Cepanje“ objekta baze u niz
Provera da li fajl postoji na serveru i da li je dostupan
Modifikacija header-a HTTP-a za prosleđivanje attachment-a
Čitanje sadržaja upload-ovanog fajla i njegova isporuka (streaming) klijentu
<?php
if(isset($_GET['id'])) {
include 'konekcijaZaFile.php';
$id = $_GET['id'];
$query = "SELECT name, type, size, path FROM upload_file_server WHERE id = '$id'";
$result = $konekcija->query($query);
$red = $result->fetch(PDO::FETCH_ASSOC);
$filename = $red['name'];
$path = $red['path'];
$size = $red['size'];
if (file_exists($path) && is_readable($path)) {
//$size = filesize($path);
header('Content-Type: application/octet-stream');
header('Content-Length: '.$size);
header('Content-Disposition: attachment; filename='.$filename);
header('Content-Transfer-Encoding: binary');
$file = @ fopen($path, 'rb');
if ($file) {
fpassthru($file);
exit;
} else { echo "Nije uspeo stream!"; }
} else { echo "Fajl ne postoji ili nije dostupan za pristup"; }
exit;
}
?>
<html><head><title>Download File As Attachment</title></head>
<body>
<?php
include 'konekcijaZaFile.php';
$query = "SELECT id, name FROM upload_file_server";
$rezultat = $konekcija->query($query);
if ($rezultat->rowCount() > 0):
$i = 1;
echo "<table border='0px'> <tr><th>Rb.</th><th>Ime fajla</th></tr>";
foreach($rezultat as $red):
echo "<tr> <td>". $i ."</td> <td> <a href='dohvatanjeBazaAttachment.php?id=".$red['id'] ."'>".$red['name']."</a></td></tr>";
$i++;
endforeach;
echo "</table>";
endif;
?> </body> </html>
Zadatak 1. – celokupno rešenje
Prikaz u browser-u
U prethodnom primeru je rešen problem preuzimanja fajla u formi attachment-a
Naglašeno je da se linkovi mogu postaviti direktno na putanju fajla, i na taj način simulirati rad klasičnog statičkog linka
Time se dobija mogućnost da se klikom na link upload-ovani sadržaj prikaže u browser-u, ako je to omogućeno od strane browser-a ili da se sadržaj download-uje kao attachment
Ovo predstavlja modifikaciju prethodnog koda, jer se kod prikaza linkova u atribut href direktno upisuje putanja (path) do mesta gde je fajl snimljen na serveru
Prikaz fajlova u formi linkova
Zadatak 2.
Kreirati stranicu koja prikazuje spisak uploadovanih fajlova (čitajući ih iz baze podataka) u formi linkova, gde se klikom na neki link sadržaj tog fajla prikazuje u browser-u ili automatski download-uje sa servera na klijentski računar, ako se ne može prikazati.
Pretpostaviti da su fajlovi uploadovani na server, u folder upload, a podaci o fajlovima smešteni u bazu podataka u tabelu upload_file_server
Prikaz fajlova u formi linkova
Zadatak 3.
Kreirati stranicu koja prikazuje slike upload-ovane na server.
Pretpostaviti da su fajlovi uploadovani na server, u folder upload, a podaci o fajlovima smešteni u bazu podataka u tabelu upload_file_server
<?php
$uploadDir = 'upload/';
if(isset($_POST['upload']))
{
$fileName = $_FILES['userfile']['name'];
$tmpName = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
$fileType = $_FILES['userfile']['type'];
// KOD ZA RESIZE SLIKE
}
?>
<html>
<head><title>Resize File</title></head>
<body>
<form action="fajloviSlikeJa.php" method="post" enctype="multipart/form-data" name="uploadform">
<table width="350px">
<tr>
<td>
<input name="userfile" type="file" id="userfile" />
</td>
<td>
<input name="upload" type="submit" id="upload" value="Upload" />
</td>
</tr>
</table>
</form>
</body>
</html>
if(isset($_POST['upload']))
{ $fileName = $_FILES['userfile']['name’]; $tmpName = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
$fileType = $_FILES['userfile']['type’];
list($sirina, $visina) = getimagesize($tmpName);
$novaSirina = 100;
$novaVisina = 50;
// Kreiranje nove slike (resource) od fajla ili URL-a
if( $fileType == "image/jpeg" ) { $postojecaSlika = imagecreatefromjpeg($tmpName); }
elseif( $fileType == "image/gif" ) { $postojecaSlika = imagecreatefromgif($tmpName); }
elseif( $fileType == "image/png" ) { $postojecaSlika = imagecreatefrompng($tmpName); }
//Kreiranje nove slike u koloru
$prazna_image = imagecreatetruecolor($novaSirina, $novaVisina);
imagecopyresampled($prazna_image, $postojecaSlika, 0, 0, 0, 0, $novaSirina, $novaVisina, $sirina, $visina);
$novaSlika = $prazna_image;
//Snimanje
$compression=75;
if( $fileType == "image/jpeg" ) { imagejpeg($novaSlika,$fileName,$compression); }
elseif( $fileType == "image/gif" ) { imagegif($novaSlika,$fileName); }
elseif( $fileType == "image/png" ) { imagepng($novaSlika,$fileName); }
echo "Ok"; }
Dohvatanje podataka o fajlu
Dohvatanje dužine i visine slike
Definisanje fiksne širine i visine nove slike
Pravljenje resursa od postojeće slike
Pravljenje prazne slike
Kopiranje dela postojeće slike u praznu sliku
Kopiranje dela postojeće slike u praznu sliku
imagecopyresized($prazna_img, $postojecaSlika, 0, 0, 0, 0, $novaSirina, $novaVisina, $sirina, $visina);
Krajnja koordinata u kopiranoj slici
Počev od koje koordinate iz kopirane slike se kreće
Gde se kopira
Rad sa slikama – kopiranje (Resize)
Od čega se kopira
Počev od koje koordinate u krajnjoj
slici se kreće kopiranje
Krajnja koordinata u originalnoj slici
Početna slika
Krajnja slika dobijena kopiranjem početne slike
0, 0
0, 0
$sirina, $visina $novaSirina, $novaVisina
if(isset($_POST['upload']))
{ $fileName = $_FILES['userfile']['name’]; $tmpName = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
$fileType = $_FILES['userfile']['type’];
list($sirina, $visina) = getimagesize($tmpName);
$procenat = 0.5;
$novaSirina = $sirina * $procenat;
$novaVisina = $visina * $procenat;
// Kreiranje nove slike (resource) od fajla ili URL-a
if( $fileType == "image/jpeg" ) { $postojecaSlika = imagecreatefromjpeg($tmpName); }
elseif( $fileType == "image/gif" ) { $postojecaSlika = imagecreatefromgif($tmpName); }
elseif( $fileType == "image/png" ) { $postojecaSlika = imagecreatefrompng($tmpName); }
//Kreiranje nove slike u koloru
$prazna_image = imagecreatetruecolor($novaSirina, $novaVisina);
imagecopyresampled($prazna_image, $postojecaSlika, 0, 0, 0, 0, $novaSirina, $novaVisina, $sirina, $visina);
$novaSlika = $prazna_image;
//Snimanje
$compression=75;
if( $fileType == "image/jpeg" ) { imagejpeg($novaSlika,$fileName,$compression); }
elseif( $fileType == "image/gif" ) { imagegif($novaSlika,$fileName); }
elseif( $fileType == "image/png" ) { imagepng($novaSlika,$fileName); }
echo "Ok"; }
Dohvatanje podataka o fajlu
Dohvatanje dužine i visine slike
Definisanje relativne nove širine i visine slike (podjednako po obe koordinate)
Pravljenje resursa od postojeće slike
Pravljenje prazne slike
Kopiranje dela postojeće slike u praznu sliku
Kopiranje dela postojeće slike u praznu sliku
if(isset($_POST['upload']))
{ $fileName = $_FILES['userfile']['name’]; $tmpName = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
$fileType = $_FILES['userfile']['type’];
list($sirina, $visina) = getimagesize($tmpName);
$novaSirina = 200px;
$procenat_promene = $sirina / $novaSirina ;
$novaVisina = $visina * $procenat_promene;
// Kreiranje nove slike (resource) od fajla ili URL-a
if( $fileType == "image/jpeg" ) { $postojecaSlika = imagecreatefromjpeg($tmpName); }
elseif( $fileType == "image/gif" ) { $postojecaSlika = imagecreatefromgif($tmpName); }
elseif( $fileType == "image/png" ) { $postojecaSlika = imagecreatefrompng($tmpName); }
Dohvatanje dužine i visine slike
Definisanje fiksne nove širine i proporcionalno izračunavanje nove visine
if(isset($_POST['upload']))
{ $fileName = $_FILES['userfile']['name’]; $tmpName = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
$fileType = $_FILES['userfile']['type’];
list($sirina, $visina) = getimagesize($tmpName);
$novaVisina = 200px;
$procenat_promene = $visina / $novaSirina ;
$novaSirina = $sirina * $procenat_promene;
// Kreiranje nove slike (resource) od fajla ili URL-a
if( $fileType == "image/jpeg" ) { $postojecaSlika = imagecreatefromjpeg($tmpName); }
elseif( $fileType == "image/gif" ) { $postojecaSlika = imagecreatefromgif($tmpName); }
elseif( $fileType == "image/png" ) { $postojecaSlika = imagecreatefrompng($tmpName); }
Dohvatanje dužine i visine slike
Definisanje fiksne nove visine i proporcionalno izračunavanje nove širine
imagecopyresized($prazna_img, $postojecaSlika, 0, 0, 0, 0, $novaSirina, $novaVisina, $sirina, $visina);
Krajnja koordinata u kopiranoj slici
Počev od koje koordinate iz kopirane slike se kreće
Gde se kopira
Rad sa slikama – Crop
Od čega se kopira
Počev od koje koordinate u krajnjoj
slici se kreće kopiranje
Krajnja koordinata u originalnoj slici
Početna slika Krajnja slika
dobijena kopiranjem početne slike
x1, y1 0, 0
x2, y2 $novaSirina, $novaVisina
Alfa transparentnost. 0 je ništa, a 100
kompletno kopiranje.
Zaštita slike žigom <?php
$slika = imagecreatefromjpeg('images/london.jpg');
$vodeniZig = imagecreatefromgif('images/watermark.gif');
imagecopymerge($slika, $vodeniZig, 100, 0, 0, 0, 250, 50, 50);
imagejpeg($slika);
imagedestroy($slika);
imagedestroy($vodeniZig);
?>
Slika sa transparentnom pozadinom
Copy and merge part of an image
Oslobađa memoriju sadržaja slike
Pozicija x, y, kopirane slike u konačnoj slici
Konačna i kopirana slika
Početna x, y pozicija od koje se uzima kopirana
slika
Krajnja x, y pozicija od koje se uzima kopirana
slika
Primena efekta filtera na sliku bool imagefilter ( resource $image , int $filtertype [, int $arg1 [, int $arg2 [, int $arg3 [, int $arg4
]]]] )
<?php $im = imagecreatefrompng('dave.png'); if($im && imagefilter($im, IMG_FILTER_GRAYSCALE)) { echo 'Image converted to grayscale.'; imagepng($im, 'dave.png'); } else { echo 'Conversion to grayscale failed.'; } imagedestroy($im); ?>
Filteri IMG_FILTER_NEGATE: Reverses all colors of the image.
IMG_FILTER_GRAYSCALE: Converts the image into grayscale.
IMG_FILTER_BRIGHTNESS: Changes the brightness of the image. Use arg1 to set the level of brightness.
IMG_FILTER_CONTRAST: Changes the contrast of the image. Use arg1 to set the level of contrast.
IMG_FILTER_COLORIZE: Like IMG_FILTER_GRAYSCALE, except you can specify the color. Use arg1, arg2 and arg3 in the form of red, green, blue and arg4 for the alpha channel. The range for each color is 0 to 255.
IMG_FILTER_EDGEDETECT: Uses edge detection to highlight the edges in the image.
IMG_FILTER_EMBOSS: Embosses the image.
IMG_FILTER_GAUSSIAN_BLUR: Blurs the image using the Gaussian method.
IMG_FILTER_SELECTIVE_BLUR: Blurs the image.
IMG_FILTER_MEAN_REMOVAL: Uses mean removal to achieve a "sketchy" effect.
IMG_FILTER_SMOOTH: Makes the image smoother. Use arg1 to set the level of smoothness.
IMG_FILTER_PIXELATE: Applies pixelation effect to the image, use arg1 to set the block size and arg2 to set the pixelation effect mode.
brightness
<?php $im = imagecreatefrompng('sean.png'); if($im && imagefilter($im, IMG_FILTER_BRIGHTNESS, 20)) { echo 'Image brightness changed.'; imagepng($im, 'sean.png'); imagedestroy($im); } else { echo 'Image brightness change failed.'; } ?>
Promena zastupljenosti boje
<?php $im = imagecreatefrompng('philip.png'); /* R, G, B, so 0, 255, 0 is green */ if($im && imagefilter($im, IMG_FILTER_COLORIZE, 0, 255, 0)) { echo 'Image successfully shaded green.'; imagepng($im, 'philip.png'); imagedestroy($im); } else { echo 'Green shading failed.'; } ?>