rad sa fajlovima - webdizajn.ict.edu.rs · zadatak 1. kreirati stranicu koja prikazuje spisak...
TRANSCRIPT
Rad sa fajlovima
Dr Nenad Kojić, dipl. i ž. Milena Vesić, spec .stuk.i ž.
Danijela Nikitin, spec .stuk.i ž.
Školska 2017/18. Nikola Mihajlović, spec .stuk.i ž.
Luka Lukić, struk. i ž.
Visoka škola strukovnih studija za informacione
i komunikacione tehnologije Preduslovi
• Ukoliko se želi fajl proslediti od koris ika do ser era, pute e for e, 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 rši ko erzijo karaktera u ASCII HEX vrednosti
• Kod vrednosti multipart/form-data nema konverzije pa se podaci prenose u originalu
• Atribut enctype= " " se koristi sa o kada se kao etod za sla je defi iše POST
• Samim tim, prilikom upload-a fajlova, limit koji dolazi sa upotrebom POST etoda se pre osi a eliči u fajla koji se upload-uje (8MB)
Preduslovi
• Ako se pokuša upload ećeg fajla od 8MB 8 886 8 do iće se greška slič a prikazanoj:
• Ako se upload-uje fajl koji i a eliči u eću od MB, a a ju od 8MB, POST eće u ositi ogra iče je, ali ajčešće e ser er hoće
• O o z ači da je ser ersko ogra iče je u ko figura iji PHP-a takvo da unosi svoj maksimalni limit za prihvatanje upload-ovanih fajlova
• Ovaj parametar se podeša a u fajlu php.i i, u folderu php, u a pp-u i po potre i se ože pro e iti.
Warning: POST Content-Length of 10725948 bytes exceeds the limit of 8388608 bytes
in Unknown on line 0
Klijentska strana
• Kao zaključak se iz odi da se a klije tskoj stra i koja želi koris iku da o oguć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či i • Primer forme
Serverska strana
• We ser er do ija uploado a i fajl i po pra ilu ga s ešta u pri re e i folder koji je konfiguracijom servera izabran
• O aj folder je zajed ički za s e fajlo e koji s i koris i i uploaduju a sajto e hostovane na tom web serveru
• Zato je bitno da se odmah nakon prenosa fajla od korisnika na web servere, u pri re e i folder, želje i fajl fizički pre esti u prostor koji je hosti go dodeljen konkret o e sajtu i tu traj o 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 pre osa fajla za ršio, kao i e server koji je taj fajl privremeno snimio na privremenu lokaciju na serveru
• Da bi programer imao pristup uploadovanom fajlu, koristi se superglobalna promenljiva $_FILES
• O o pro e lji o se o oguća a pristup poda i a o upload-ovanom fajlu
• Kao i kod upotrebe $_POST ili $_GET superglobalnih promenljivih, sintaksa upotre e $_FILES za pristup pre eto fajlu, čiji je a e atri ut pr.
<input name="userfile" type="file" id="userfile" />
• je
$_FILES['userfile']
$_FILES
• Za razliku od $_POST ili $_GET, kojima se dobija poslati string, superglobalna pro e lji a $_FILES i a iše podataka koji opisuju fajl i e, tip, eliči u,… 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: jego o i e sa ekste zijo , puta ja do esta gde je pri re e o s ešte a e ser er, eliči a u ajti a, tipa fajla i i for a ija o greš i, ako se greška
desila
• Njiho i red osti a se tako pristupa po oć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 for e čiji je a e io userfile, PHP kodom pristupamo i dobijamo informacije o upload-ovanom fajlu, u lokalne promenljive PHP-a
• U o o slučaju to su pro e lji e $fileName, $tmpName, $fileSize, $fileType i $fileError
• Polje za error raća 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'];
klijent + server
fajlovi.php
Premešta je fajla
• Nakon upload-a fajl se nalazi na privremenoj lokaciji na serveru
• Puta ja do te loka ije se kodo do ija po oću
$tmpName = $_FILES['userfile']['tmp_name'];
• Sada je potre o fajl sa te loka ije pre estiti u eku drugu loka iju koja će biti trajna
• Ako pretpostavimo da je to folder upload, koji se nalazi u root-u pos atra og hosti ga sajta, o u puta ju ože o defi isati kao promenljivu
$uploadDir = 'upload/’; • Sada je potrebno formirati kompletnu novu putanju (putanja kroz folder
zaključ o sa i e o i ekste zijo fajla
• Ako se zadrža a postojeće i e i ekste zija fajla, to se realizuje kao:
$filePath = $uploadDir . $fileName;
Premešta je 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
• O o se realizuje po oću fu k ije move_uploaded_file();
• U ko kret o slučaju, pre ešta je se rši po oću
$result = move_uploaded_file($tmpName, $filePath);
• Promenljiva $result ima vrednost true ili false u zavisnosti da li je pre ešta je uspeš o realizo a o ili e.
Upload fajla na server u folder upload
Šta ako upload-a
• Nako uploada fajla a ser er i pre ešta ja fajla u želje i folder pr. 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 azu podataka, i s e što je potre o radi se a azi i for a ija iz aze, dok se sa o fajl fizički skladišti a ser er
• Fajl se ože s i iti i u azu podataka kao tip BLOB, pr. ali se o o e praktikuje jer po eća a eliči u aze, pa sa i ti i backup-e, pretragu i sl.
• Zato se praktikuje snimanje fajla na server a putanju do istog u bazu, da bi se tač o z alo koji fajlo i postoje i a koji loka ija a
• U prethod o pri eru, fajl se u azu ože upisati ako jego og s ešta ja 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 o o slučaju postoji sa o jed o polje tipa file, pa je kreira a ta ela upload_file_server koja ima kolone id, name, type, size i path, kao na slici
• Tako će upit koji se poda i do ije i o fajlu upisuju kao: • $query = "INSERT INTO upload_file_server (name, size, type, path ) VALUES
('$fileName', '$fileSize', '$fileType', '$filePath')";
Primer upload-a
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>
Rezultat
Realizacija ograniče ja
Ogra iče ja od stra e progra era
• Često je potre o ogra ičiti upload od stra e koris ika
• O o se ože uraditi po iše kriteriju a, ali su ajkorišće iji ogra iče ja po eliči i tj. teži i fajla i tipu fajla
• Tako se često za profilnu sliku o ogućuje sa o slika koja je jpg for ata do pr. MB ili slič o.
• 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!");
}
• Prethod i kod za upload sada se ože proširiti o i kodo !
Upload sa ogra iče ji a
Kod koji je od ranije kada nije
ilo ogra iče ja
Ako je s e u skladu sa ogra iče je ide se a upload fajla
Upload sa promenom imena fajla
Problem?
• Kod svih do sada opisanih upload-a pr o je io iz rše upload fajla a ser er, pa njegovo kopiranje iz privremenog u trajni folder i tek tada kada se taj posao oko ča upis i for a ija o fajlu u azu podataka
• Međuti , ako jeda koris ik 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 pres i iti preko prethod e i prethod a će se izgu iti • Da se o o e i deša alo, fajlo i oraju i ati u ikat a i e a
• O o ože da se postig e a iše ači a, ali jeda od ajlakših je da se fajlo i a da ime id-a iz tabele baze koji je autoincrement
• Da i se o o uradilo, pr o se ora upisati zapis u azu, pa kada se upiše da se do ije id, koji se koristi za o o i e fajla, pa se tek tada ož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đi a je ekste zije fajla iz i e a
Promena imena fajla kao id zapisa
Kopiranje fajla sa novim imenom
Dopu a postojećeg zapisa o i 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>
Prikaz spiska upload-ovanih fajlova -
attachment
Kako dohvatiti fajlove sa servera?
• Nakon upload-a, logič o je da se ti fajlo i ekako, ekada, tre aju prikazati korisniku
• Prikaz fajla u sa o sajtu je oguć sa o u slučaju da ro ser ože da prikaže for at tog fajla jpg, png, gif, pdf, …
• Generalno, kao oblik preuzimanja uploadovanih fajlova sa servera, korisniku se ože prikazati spisak li ko a, koji predsta ljaju pr. i e a fajlo a koji su
a ser eru, gde se kliko a eki li k sadržaj tog fajla auto atski download-uje sa ser era a klije tski raču ar. • Drugi oblik dohvatanja fajlova je njihovo preuzimanje sa servera i prikaz u
e stra i za o e tipo e fajlo a koji o oguća aju prikaz u ro ser-u)
Prikaz fajlova u formi linkova
• Zadatak 1.
• Kreirati stranicu koja prikazuje spisak uploadovanih fajlo a čitajući ih iz aze podataka u for i li ko a, gde se kliko a eki li k sadržaj tog fajla automatski download-uje sa ser era a klije tski raču ar.
• Pretpostaviti da su fajlovi uploadovani na server, u folder upload, a podaci o fajlo i a s ešte i u azu podataka u ta elu upload_file_server
Zadatak 1. - reše je
Prvi korak je prikazati imena fajlova iz baze u formi linkova
Li ko e podesiti da „gađaju“ istu stra i u i pre ose podatak id id zapisa
Dohvatanje podataka iz baze
Kreira je di a ičke ta ele
Kreira je di a ičkih li ko a
Rezultat
• Na o aj ači do ije je spisak li ko a, koji su di a ički kreira i na bazi sadržaja iz ta ele
• 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 para etar id u ko e se alazi red ost pri ar og ključa za posmatrani zapis
• Kliko a li k, učitaće se po o o ista stra i a ali sa prosleđe i para etro id, kao da s o to uradili a sledeći ači ruč o:
dohvatanjeBazaAttachment.php?id=3
• Sada treba dodati kod koji u ovoj strani na bazi prosleđe og id-ja dohvata ranije upload-o a i fajl sa ser era i isporučuje ga u formi attachment-a
Zadatak 1. – reše je dodatak
Dohvatanje podataka iz baze
„Cepa je“ o jekta aze u iz
Provera da li fajl postoji na
serveru i da li je dostupan
Modifikacija header-a HTTP-a za
prosleđi a je atta h e t-a
Čita je sadržaja upload-ovanog fajla i
njegova isporuka (streaming) klijentu
Zadatak 1. – celokup o reše je
<?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);
Prikaz spiska upload-ovanih fajlova – kroz
browser
Prikaz u browser-u
• U prethod o pri eru je reše pro le preuzi a ja fajla u for i attachment-a
• Naglaše o je da se li ko i ogu posta iti direkt o a puta ju fajla, i a taj ači si ulirati rad klasič og statičkog li ka
• Ti e se do ija oguć ost da se kliko a li k upload-ovani sadržaj prikaže u browser-u, ako je to o oguće o od stra e ro ser-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 fajlo a čitajući ih iz aze podataka u for i li ko a, gde se kliko a eki li k sadržaj tog fajla prikazuje u browser-u ili automatski download-uje sa servera na klijentski raču ar, ako se e ože prikazati.
• Pretpostaviti da su fajlovi uploadovani na server, u folder upload, a podaci o fajlo i a s ešte i u azu podataka u ta elu upload_file_server
Zadatak 2. – reše je
Dohvatanje podataka iz baze
Kreira je di a ičkih li ko a
Prikaz slika upload-ovanih na 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 fajlo i a s ešte i u azu podataka u ta elu upload_file_server
Zadatak 3 – reše je
Dohvatanje podataka iz baze
Kreira je di a ičkih slika
Rezultat
Resize slike
<?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>
if(isset($_POST['upload']))
{ $fileName = $_FILES['userfile'][' a e’];
$tmpName = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
$fileType = $_FILES['userfile']['t pe’];
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); }
Dohvatanje podataka o fajlu
Dohvatanje duži e i visine slike
Defi isa je fiks e širi e i isi e o e slike
Pra lje je resursa od postojeće slike
Pravljenje prazne slike
Kopira je dela postojeće slike u praz u sliku
Kopira je dela postojeće slike u praz u sliku
Rad sa slikama – kopiranje (Resize)
imagecopyresized($prazna_img, $postojecaSlika, 0, 0, 0, 0, $novaSirina, $novaVisina, $sirina, $visina); Krajnja koordinata u
kopiranoj slici
Poče od koje koordi ate iz kopira e slike se kreće
Gde se kopira Od čega se
kopira
Poče od koje koordi ate u kraj joj sli i se kreće
kopiranje
Krajnja koordinata u
originalnoj slici
Počet a slika
Krajnja slika dobijena
kopiranjem počet e slike
0, 0
0, 0
$sirina, $visina $novaSirina, $novaVisina
if(isset($_POST['upload']))
{ $fileName = $_FILES['userfile'][' a e’];
$tmpName = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
$fileType = $_FILES['userfile']['t pe’];
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); }
Dohvatanje podataka o fajlu
Dohvatanje duži e i visine slike
Definisanje relativne o e širi e i isi e slike podjed ako po obe koordinate)
Pra lje je resursa od postojeće slike
Pravljenje prazne slike
Kopira je dela postojeće slike u praz u sliku
Kopira je dela postojeće slike u praz u sliku
if(isset($_POST['upload']))
{ $fileName = $_FILES['userfile'][' a e’];
$tmpName = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
$fileType = $_FILES['userfile']['t pe’];
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ži e i visine slike
Definisanje fiksne o e širi e i propor io al o izraču a a je nove visine
if(isset($_POST['upload']))
{ $fileName = $_FILES['userfile'][' a e’];
$tmpName = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
$fileType = $_FILES['userfile']['t pe’];
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ži e i visine slike
Definisanje fiksne o e isi e i propor io al o izraču a a je o e širi e
Rad sa slikama – Crop
imagecopyresized($prazna_img, $postojecaSlika, 0, 0, 0, 0, $novaSirina, $novaVisina, $sirina, $visina); Krajnja koordinata u
kopiranoj slici
Poče od koje koordi ate iz kopira e slike se kreće
Gde se kopira Od čega se
kopira
Poče od koje koordi ate u kraj joj sli i se kreće
kopiranje
Krajnja koordinata u
originalnoj slici
Počet a slika Krajnja slika dobijena
kopiranjem počet e slike
x1, y1 0, 0
x2, y2 $novaSirina, $novaVisina
Alfa transparentnost. 0
je išta, a kompletno kopiranje.
Zaštita slike žigo
<?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
Oslo ađa e oriju sadržaja slike
Pozicija x, y, kopirane slike
u ko ač oj sli i
Ko ač a i kopirana slika
Počet a , pozi ija od koje se uzima kopirana slika
Krajnja x, y pozicija od koje
se uzima kopirana slika
Primer
Rad sa filterima
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.
Argumenti filtera
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.'; } ?>
Rad sa fajlovima
Dr Nenad Kojić, dipl. i ž. Milena Vesić, spec .stuk.i ž.
Danijela Nikitin, spec .stuk.i ž.
Školska 2017/18. Nikola Mihajlović, spec .stuk.i ž.
Luka Lukić, struk. i ž.
Visoka škola strukovnih studija za informacione
i komunikacione tehnologije