14
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 dž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

Rad sa fajlovima - webdizajn.ict.edu.rs · Zadatak 1. Kreirati stranicu koja prikazuje spisak uploadovanih (io}À~ ] iµ ]] Z]Ì Ì } l µ(} u]o]vl}ÀUP lo]l}uvv l]o ]vl Îi }P(io

  • Upload
    others

  • View
    10

  • Download
    0

Embed Size (px)

Citation preview

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