Rad sa fajlovima - webdizajn.ict.edu.rs · Zadatak 1. Kreirati stranicu koja prikazuje spisak...

Post on 20-Oct-2019

10 views 0 download

Transcript of Rad sa fajlovima - webdizajn.ict.edu.rs · Zadatak 1. Kreirati stranicu koja prikazuje spisak...

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