Poslao: 22 Avg 2013 13:36
|
offline
- FoxVanis

- Ugledni građanin
- Web Designer, PHP Developer; HTML, CSS, SQL, jQuery Programmer
- Pridružio: 13 Jun 2010
- Poruke: 307
- Gde živiš: Subotica
|
Pre nekoliko godina sam uklopio nekoliko funkcija za upload, save, resize and rename slike u jednu i koristio sam je dosta često ali sada imam jedan problem.
Funkciji kada zadam veličinu 400px po širini i ako uploadujem sliku koja je 200px moja funkcija poveča tu sliku na 400px. Trebalo bi mi da zadrži 200px ali ako uploadujem sliku veću od 400px da mi smanji na 400px jer je to maksimalna veličina koja mi treba za sajt.
Ovu opciju koristim za jednu galeriju i baš sam zaglavio sa time.
Evo i funkcije:
function get_extension($str)
{
$i = strrpos(stripslashes($str),".");
if (!$i) { return ""; }
return strtolower(substr($str,($i+1),(strlen($str) - $i)));
}
function image_size($maxwidth, $maxheight, $stringname)
{
return !empty($_FILES[$stringname]['tmp_name'])?((filesize($_FILES[$stringname]['tmp_name']) > $maxwidth * $maxheight)?false:true):false;
}
function image_extension($stringname)
{
if(!empty($_FILES[$stringname]['tmp_name']))
{
$filename = stripslashes($_FILES[$stringname]['name']);
$extension = get_extension($filename);
$extension = strtolower($extension);
$image_extension=($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "gif")?false:true;
}else{$image_extension=false;}
return $image_extension;
}
function save_image($maxwidth, $maxheight, $quality, $stringname, $folder, $imagename, $newwidth)
{
if(!empty($_FILES[$stringname]['name']))
{
if($_SERVER["REQUEST_METHOD"] == "POST")
{
$image = $_FILES[$stringname]['name'];
$uploadedfile = $_FILES[$stringname]['tmp_name'];
if(empty($uploadedfile))
{$upload_image=false;}
else
{
if ($image)
{
$filename = stripslashes($_FILES[$stringname]['name']);
$extension = get_extension($filename);
$extension = strtolower($extension);
if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "gif"))
{$upload_image=false;}
else
{
if (image_size($maxwidth, $maxheight, $stringname))
{
if($extension=="jpg" || $extension=="jpeg" )
{
$uploadedfile = $_FILES[$stringname]['tmp_name'];
$src = imagecreatefromjpeg($uploadedfile);
}
else if($extension=="png")
{
$uploadedfile = $_FILES[$stringname]['tmp_name'];
$src = imagecreatefrompng($uploadedfile);
}
else
{
$src = imagecreatefromgif($uploadedfile);
}
list($width,$height)=getimagesize($uploadedfile);
// proverava da li je slika dozvoljene sirine, ako jeste ostavlja tu sirinu, ako ne - smanjuje je
if($width > $maxwidth){
// koristi vec dat $newwidth;
} else {
$newwidth = $width;
}
$newheight=($height/$width)*$newwidth;
$tmp=imagecreatetruecolor($newwidth,$newheight);
imagecopyresampled($tmp,$src,0,0,0,0,$newwidth,$newheight,$width,$height);
$name = $imagename;
$filename = $folder.$name;
if($extension=="jpg" || $extension=="jpeg" )
{
imagejpeg($tmp,$filename,$quality);
}
else if($extension=="png")
{
imagepng($tmp,$filename);
}
else
{
imagegif($tmp,$filename);
}
imagedestroy($src);
imagedestroy($tmp);
$upload_image=true;
}
else
{
$upload_image=false;
}
}
}
}
}
}
return $upload_image;
}
Hvala vam!
|
|
|
Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
|
|
Poslao: 22 Avg 2013 13:59
|
offline
- Rastafarii

- Moderator foruma
- Pridružio: 22 Mar 2006
- Poruke: 3760
- Gde živiš: 127.0.0.1
|
Ovo nikad nemoj da radis:
function get_extension($str)
{
$i = strrpos(stripslashes($str),".");
if (!$i) { return ""; }
return strtolower(substr($str,($i+1),(strlen($str) - $i)));
}
jer ja mogu slucajno (ili namerno) da png sliku sacuvam kao slika.jpg i prouzrokujem fatal error. U stvari, nikad ne veruj onome sto korisnik unese bi trebalo da ti bude ideja vodilja.
Ostalo cu da pogledam kad dodjem kuci, pa javljam.
|
|
|
|
Poslao: 22 Avg 2013 14:49
|
offline
- Pridružio: 16 Feb 2011
- Poruke: 1630
- Gde živiš: Pancevo
|
Covek ja tebe ne mogu da razumem. Iskreno zao mi te je, vidim da imas volje i znas da radis ali daj nauci taj OOP. Pises 1000 i 1000 funkcija. Eo mogao si ovo da stavis u klasu i samo da izvrtis logiku. Veruj mi radi OOP lakse ce ti biti. Ali kako god...
|
|
|
|
Poslao: 22 Avg 2013 15:30
|
offline
- FoxVanis

- Ugledni građanin
- Web Designer, PHP Developer; HTML, CSS, SQL, jQuery Programmer
- Pridružio: 13 Jun 2010
- Poruke: 307
- Gde živiš: Subotica
|
Napisano: 22 Avg 2013 15:27
_iKaC ::Covek ja tebe ne mogu da razumem. Iskreno zao mi te je, vidim da imas volje i znas da radis ali daj nauci taj OOP. Pises 1000 i 1000 funkcija. Eo mogao si ovo da stavis u klasu i samo da izvrtis logiku. Veruj mi radi OOP lakse ce ti biti. Ali kako god...
Ovo je prastara skripta koju sam radio još kada sam počeo programiranje u PHP-u a toliko sada imam vremena samo da je primenim. Radim OOP ali ovo nisam pretvorio u to. Neke od funkcija koristim odvojeno i za druge stvari ali sam ovde sakupio na jedno mesto da bi neko od vas mogao da isproba.
Moraću ovo da "šutnem" u jednu "pametnu" klasu jer je moćna skriptica a koristio sam je za dodavanje profilne slike, slike za sadržaj ali sada je hoću koristiti za jednu galeriju i imam problema sa resize.
Obećavam da ću je kada ovo prepravim, uradiću OOP i okačiti.
Dopuna: 22 Avg 2013 15:30
Rastafarii ::Ovo nikad nemoj da radis:
function get_extension($str)
{
$i = strrpos(stripslashes($str),".");
if (!$i) { return ""; }
return strtolower(substr($str,($i+1),(strlen($str) - $i)));
}
jer ja mogu slucajno (ili namerno) da png sliku sacuvam kao slika.jpg i prouzrokujem fatal error. U stvari, nikad ne veruj onome sto korisnik unese bi trebalo da ti bude ideja vodilja.
Ostalo cu da pogledam kad dodjem kuci, pa javljam.
čoveče, upravu si, tek sada vidim. Ovo sam koristio ne samo za slike već i za druge stvari. Eh... ovo je deo jednog mog starog jezgra za CMS i toliko je staro da ima jedno 4-5 godina. Hvala ti u napred i za ovo. Šta predlažeš za hvatanje ekstenije? Upamti, ovo koristim u nekim sistemima i za .zip, .pdf itd. kada reimenujem. Hvala ti.
|
|
|
|
Poslao: 22 Avg 2013 19:23
|
offline
- |_MeD_|

- Zaslužni građanin
- Pridružio: 02 Okt 2005
- Poruke: 546
|
[Link mogu videti samo ulogovani korisnici]
[Link mogu videti samo ulogovani korisnici]
|
|
|
|
Poslao: 23 Avg 2013 08:33
|
offline
- FoxVanis

- Ugledni građanin
- Web Designer, PHP Developer; HTML, CSS, SQL, jQuery Programmer
- Pridružio: 13 Jun 2010
- Poruke: 307
- Gde živiš: Subotica
|
|_MeD_| ::http://php.net/manual/en/function.exif-imagetype.php
[Link mogu videti samo ulogovani korisnici]
E hvala ovo dosta pomaže. Uz dobru klasu mogu napraviti proveru za sve.
Još samo da skontam ovo u vezi resize slike.
|
|
|
|
Poslao: 23 Avg 2013 08:45
|
offline
- Srki_82

- Moderator foruma
- Srđan Tot
- Am I evil? I am man, yes I am.
- Pridružio: 12 Jul 2005
- Poruke: 2483
- Gde živiš: Ljubljana
|
Deluje mi kao da je sve u redu. Predlažem ti da preko debugera pogledaš šta se dešava u delu:
if($width > $maxwidth) {
// koristi vec dat $newwidth;
} else {
$newwidth = $width;
}
I prođi posle kroz kod za resize. Verovatno je neka jednostavna stvar.
|
|
|
|
Poslao: 11 Nov 2013 15:35
|
offline
- FoxVanis

- Ugledni građanin
- Web Designer, PHP Developer; HTML, CSS, SQL, jQuery Programmer
- Pridružio: 13 Jun 2010
- Poruke: 307
- Gde živiš: Subotica
|
Evo poklon od mene, jedan kod koji sam razvio i po obećanju uradio OOP.
Ako nekome mogu pomoći sa ovim srećno!
/*
===================== UPLOAD IMAGE ON SERVER WITH CHECK AND RESIZE =====================
* By: FoxVanis
* [Link mogu videti samo ulogovani korisnici]
* This is open source and all changes are allowed.
================================================================
// Setup class to recive input:
$name = 'image'; // this is file name from upload form ($_FILE['image'])
$maxwidth = 1280; // maximal width 1280px
$maxheight = 1024; // maximal height 1024px
$newwidth = 800; // new width 800px
$newheight = false; // automatically adjust the height according to the width of the diagonal
$image = new image($name, maxwidth, $maxheight, $newidth, $neweight);
================================================================
// Check size of image what you whant to upload (true/false)
if($image->size())
{
echo 'Size is OK';
}
else
{
echo 'Too large image';
}
================================================================
// Check if image in optimal minimal and maximal dimensions (true/false)
$minwidth = 200; // minimal width 200px
$minheight = 200; // minimal height 200px
if($image->dimensions($minwidth, $minheight))
{
echo 'Size is OK';
}
else
{
echo 'This image is not optimal dimension';
}
================================================================
// Save image on server (true/false)
$imagename = 'image_name';
$folder = 'image/';
$quality = 100; // min 0% max 100%
if($image->save($imagename,$folder,$quality))
{
echo 'Image is saved';
}
else
{
echo 'Image not saved';
}
================================================================
*/
class image
{
private $gif = IMAGETYPE_GIF;
private $jpg = IMAGETYPE_JPEG;
private $png = IMAGETYPE_PNG;
private $maxwidth = false;
private $maxheight = false;
private $name = false;
private $newwidth = false;
private $newheight = false;
/*================== PRIVATE AND GENERAL FUNCTIONS ==================*/
public function image($name=false,$maxwidth=false,$maxheight=false,$newwidth=false,$newheight=false)
{
$this->name = !empty($name) ? $name : false;
$this->maxwidth = !empty($maxwidth) ? $maxwidth : false;
$this->maxheight = !empty($maxheight) ? $maxheight : false;
$this->newwidth = !empty($newwidth) ? $newwidth : false;
$this->newheight = !empty($newheight) ? $newheight : false;
}
private function ext()
{
$img = stripslashes($_FILES[$this->name]['name']);
return exif_imagetype($img);
}
/*==================================================================*/
// image size
public function size()
{
if(!empty($this->name) & !empty($this->maxwidth) & !empty($this->maxheight))
return (!empty($_FILES[$this->name]['tmp_name'])
?((filesize($_FILES[$this->name]['tmp_name'])>$this->maxwidth*$this->maxheight)?false:true):false);
else die ("ERROR: class image->size() must have all property defined!");
}
// check strict image dimensions
public function dimensions($minwidth, $minheight)
{
if(!empty($this->name) & !empty($minwidth) & !empty($minheight) & !empty($this->maxwidth) & !empty($this->maxheight))
{
if(!empty($_FILES[$this->name]['tmp_name']))
{
$image = $_FILES[$this->name]['tmp_name'];
$image_size = getimagesize($image);
return (
$image_size[0] >= $minwidth &&
$image_size[0] <= $this->maxwidth &&
$image_size[1] >= $minheight &&
$image_size[1] <= $this->maxheight
)
? true : false;
} else return false;
} else die ("ERROR: class image->dimensions($name, $minwidth, $minheight, $maxwidth, $maxheight) must have all property defined!");
}
// save image on server
public function save(
$imagename = false,
$folder = false,
$quality = 100
)
{
if(!empty($_FILES[$this->name]['name']))
{
if(($_SERVER["REQUEST_METHOD"] == "POST") || ($_SERVER["REQUEST_METHOD"] == "GET"))
{
$image = $_FILES[$this->name]['name'];
$uploadedfile = $_FILES[$this->name]['tmp_name'];
if(!empty($uploadedfile))
{
$extension=$this->ext($name);
if (($extension == $this->jpg) && ($extension == $this->png) && ($extension == $this->gif))
{
if ($this->size())
{
$src = false;
if($extension == $this->jpg)
$src = imagecreatefromjpeg($uploadedfile);
else if($extension == $this->png)
$src = imagecreatefrompng($uploadedfile);
else if($extension == $this->gif)
$src = imagecreatefromgif($uploadedfile);
if(!empty($src))
{
list($width,$height)=getimagesize($uploadedfile);
$newwidth=(($width > $this->newwidth) ? $this->newwidth : $width);
$newheight=!empty($this->newheight)?$this->newheight:(($height/$width)*$newwidth);
$tmp=imagecreatetruecolor($newwidth,$newheight);
imagecopyresampled($tmp,$src,0,0,0,0,$newwidth,$newheight,$width,$height);
$filename = $folder.$imagename;
if($extension==$this->jpg) imagejpeg($tmp,$filename,$quality);
else if($extension==$this->png) imagepng($tmp,$filename);
else if($extension==$this->gif) imagegif($tmp,$filename);
imagedestroy($src); imagedestroy($tmp);
return true;
} else return false;
} else return false;
} else return false;
} else return false;
} else return false;
} else return false;
}
}
Ovo kopirajte u svoj CMS pratite tutorijal i radiće. Mene super služi.
|
|
|
|
Poslao: 11 Nov 2013 23:48
|
offline
- Rastafarii

- Moderator foruma
- Pridružio: 22 Mar 2006
- Poruke: 3760
- Gde živiš: 127.0.0.1
|
Ovo podrazumeva da je EXIF biblioteka ucitana, a pretpostavka je majka svih zajeba. Mozes da koristis funkciju getimagesize(), koja ne zahteva nijednu dodatnu biblioteku, a sasvim zavrsava posao (obrati paznju na treci element niza koji vraca).
Drugo - ne prekidaj izvrsavanje skripte sa die(), nego baci Exception, koji posle u kodu mozes da uhvatis i prikazes gresku kakvu hoces, a ne belu stranu sa crnim tekstom "Something went wrong".
Za PNG tip slike totalno ignorises podesavanje kvaliteta treci parametar f-je imagepng(). Konstante IMAGETYPE_* bez ikakve potrebe guras u private promenljive. Ne dozvoljavas korisniku da podesi minimalnu visinu i sirinu...
|
|
|
|
Poslao: 12 Nov 2013 15:06
|
offline
- FoxVanis

- Ugledni građanin
- Web Designer, PHP Developer; HTML, CSS, SQL, jQuery Programmer
- Pridružio: 13 Jun 2010
- Poruke: 307
- Gde živiš: Subotica
|
Rastafarii hvala ti. Ovo je dosta korisan savet. izvršio sam 90% izmena koje si naveo, samo me zanima Exception. To ne razumem nešto. Znam da ide sa try{}catch... ali nisam shvatio poentu. Možeš malo da pojasniš?
Izmene ću okačiti kada sve kompletiram.
|
|
|
|