Kako da smanjim velicinu slike pri upload-u?

imao sam preko 100 takvih noci, tako da mogu sa sigurnoscu da ti kazem da ni jedna nije uzaludna! cak i kad nista ne ide po planu, nauci se mnogo toga…

1 Like

Ako će što pomoći, evo ti funkcija za resize koju ja koristim

function create_thumb($src,$dest,$desired_width)
{
/*If no dimenstion for thumbnail given, return false */
$f=array();

$fparts = pathinfo($src);
$ext = strtolower($fparts['extension']);
if (!in_array($ext,array('gif','jpg','png','jpeg'))) return false;


/* read the source image */
if ($ext == 'gif')$resource = imagecreatefromgif($src);
else if ($ext == 'png')$resource = imagecreatefrompng($src);
else if ($ext == 'jpg' || $ext == 'jpeg')$resource = imagecreatefromjpeg($src);

$width = imagesx($resource);
$height = imagesy($resource);

$f[widthBefore]=$width;
$f[heightBefore]=$height;

/* find the “desired height” or “desired width” of this thumbnail, relative to each other, if one of them is not given */
$desired_height = floor($height * ($desired_width / $width));

/* create a new, "virtual" image */
$virtual_image = imagecreatetruecolor($desired_width,$desired_height);

/* copy source image at a resized size */
imagecopyresampled($virtual_image,$resource,0,0,0,0,$desired_width,$desired_height,$width,$height);

/* create the physical thumbnail image to its destination */
/* Use correct function based on the desired image type from $dest thumbnail source */
/*
$fparts = pathinfo($dest);
$ext = strtolower($fparts['extension']);
/* if dest is not an image type, default to jpg */
/*
if (!in_array($ext,array('gif','jpg','png','jpeg'))) $ext = 'jpg';
$dest = $fparts['dirname'].'/'.$fparts['filename'].'.'.$ext;
*/

if ($ext == 'gif') imagegif($virtual_image,$dest);
else if ($ext == 'png') imagepng($virtual_image,$dest);
else if ($ext == 'jpg' || $ext == 'jpeg') imagejpeg($virtual_image,$dest);

return $f;
}

…uneseš parametre gdje ti se slika nalazi ($src), gdje žliš da ti je spremi nakon resizanja ($dest), i željenju širinu slike ($desired_width), i to je to.

Odradit ću ti ja to. Koliko plaćaš?

btw ostali su ti dobro rekli - ne vrijedi učiti programerske jezike ako prvo ne znaš engleski jezik. Učenje engleskog jezika bi ti trebao biti zadatak broj jedan ako se misliš programiranjem baviti u budućnosti. Inače ćeš se za svaki problem oslanjati na pomoć ekipe s našeg govornog područja, a nas toliko ima da svi stanemo pod jedno stablo bez da se guramo.

tesko da ce mu pomoci, na linku koji sam mu poslao ima takvih 50 funkcija, da je bilo koju kopirao stavio u prazan file i pokrenio, skuzio bi kako funkcija radi, da je stavio tekst u google translate skuzio bi sto pise u komentarima, kao sto ima i tvoja funkcija… umjesto toga on je odlucio ne raditi to, tako da osim da mu netko napise direktan kod koji rijesava tocno njegov problem, nece mu nista pomoci :confused:
mislim, ak toliko ne kuzis kod da nemozes skuziti gdje bi ga trebao pasteati, kak si napravio upload formu?

@bozoou Hvala puno,jedini si koji je pokusao da mi pomogne,ali nisam mogao da se snadjem,nesto radim pogresno ali neznam sta.Sta god sam pokusao nista ne funkcionise.Ali hvala u svakom slucaju.Pozdav!

Mislio sam na neki banner na sajtu ili link ali moze i ta varijanta.A koliko trazis?

Probao sam i da stavim u prazan file i nista,nece.Predpostavio sam da sam kopirao kod na pogresno mesto i probao sam na vise mesta ali nece pa nece.A ovu skriptu sam nasao na www.w3schools.com (na tom sajtu najvise i ucim) pa sam je malo prosirio i izmenio kako mi odgovara.

pa ok, ali bozoo ti je dao funkciju koja radi to sto tebi treba, ti jedino trebas poslati width & height, odnosno sirinu i visinu :wink:

njegova funkcija 100% radi, kao i sve one koje se nalaze na onom linku sto sam ti ja poslao, ako je ti nemozes ukomponirati u svoj kod, nemoze ti nitko pomoci osim da zakacis svoj kod i netko to napise umjesto tebe.

Ma probao sam sve i ne vredi,osecam da je neka glupost u pitanju ali neznam sta je u pitanju.Kod sam napisao u prvom postu evo sacu da okacim i html kod ako treba i to.

HTML

<form action="upload_file.php"  method="post"  enctype="multipart/form-data"   id="upload_form" >
<input type="file" name="file[]"  id="file1">
<input type="file" name="file[]"  id="file2">
<input type="file" name="file[]"  id="file3">
<input type="file" name="file[]"  id="file4">
<input type="file" name="file[]"  id="file5">
<input type="file" name="file[]"  id="file6">
<input type="file" name="file[]"  id="file7">
<input type="file" name="file[]"  id="file8">
<input type="file" name="file[]"  id="file9">
<input type="file" name="file[]"  id="file10">

<input type="submit" name="submit" value="Snimi oglas" id="submit-upload">
</form>

a upload_file.php

for ($i=0;$i<count($_FILES['file']['name']);$i++){
	$ran_num =  mt_rand().mt_rand().mt_rand().mt_rand().mt_rand();
    $allowedExts = array("gif", "jpeg", "jpg", "png", "JPG");
    $temp = explode(".", $_FILES["file"]["name"][$i]);
    $extension = end($temp);
    if ((($_FILES["file"]["type"][$i] == "image/gif")
    || ($_FILES["file"]["type"][$i] == "image/jpeg")
    || ($_FILES["file"]["type"][$i] == "image/jpg")
    || ($_FILES["file"]["type"][$i] == "image/pjpeg")
    || ($_FILES["file"]["type"][$i] == "image/x-png")
    || ($_FILES["file"]["type"][$i] == "image/png")
    || ($_FILES["file"]["type"][$i] == "image/JPG")
   )
    && ($_FILES["file"]["size"][$i] < 5000000) && ($_FILES["file"]["error"][$i]==0)
    && in_array($extension, $allowedExts)){
        if (file_exists("upload/".$i ."_".$ran_num . $_FILES["file"]["name"][$i])){
        } else {
            move_uploaded_file($_FILES["file"]["tmp_name"][$i],
            "upload/".$i ."_" .$ran_num. $_FILES["file"]["name"][$i]);
			$slika= "/postavi_oglas/". "upload/" .$i ."_" .$ran_num. $_FILES["file"]["name"][$i];
$q = mysqli_query($con,"INSERT INTO `automobili_slike` (
 `id` ,
 `slika`,
 `id_oglasa`
 )
 VALUES (
 NULL , '$slika','$id_oglasa'
 );");

}}
}

Povadio sam delove koje se ticu uploada slika.Valjda je to dovoljno.

Ajde da nešto putem i naučiš.:smile:

Jel ti imaš ikakvu ideju gdje trebaš kopirat funkciju i kako se funkcija općenito može iskoristiti?

Slijepo kopiranje svuda okolo i vrćenje raznih varijanti kroz cijelu noć ti neće previše pomoći ako ne razmišljaš usmjereno. Stoga, reci kako razmišljaš da vidim što opće krvio radiš i gdje zapinješ.

Predpostavljam da se treba nalaziti u for petlji posto treba izvrsiti resize za svaku sliku (a vecinom dodaju po svih 10)
E sad posto kazu da se prvo mora izvrsiti upload pa resize ja sam ga stavljao iznad i ispod query-ja kojim upisujem putanje slika i id oglasa u bazu.Jel sam tu pogresio?

eo ti, pa kopaj, tvoj kod s njegovom funkcijom, imas varijablu kojoj izmjenis vrijednost i dobijes razilicit width

<?php
function create_thumb($src,$dest,$desired_width){
    $f=array();
    $fparts = pathinfo($src);
    $ext = strtolower($fparts['extension']);
    if (!in_array($ext,array('gif','jpg','png','jpeg'))) return false;
    if ($ext == 'gif')$resource = imagecreatefromgif($src);
    else if ($ext == 'png')$resource = imagecreatefrompng($src);
    else if ($ext == 'jpg' || $ext == 'jpeg')$resource = imagecreatefromjpeg($src);
    
    $width = imagesx($resource);
    $height = imagesy($resource);
    $f[widthBefore]=$width;
    $f[heightBefore]=$height;
    $desired_height = floor($height * ($desired_width / $width));
    $virtual_image = imagecreatetruecolor($desired_width,$desired_height);
    imagecopyresampled($virtual_image,$resource,0,0,0,0,$desired_width,$desired_height,$width,$height);
    if ($ext == 'gif') imagegif($virtual_image,$dest);
    else if ($ext == 'png') imagepng($virtual_image,$dest);
    else if ($ext == 'jpg' || $ext == 'jpeg') imagejpeg($virtual_image,$dest);
    return $f;
}

if ($_FILES){
    $na_koliku_sirinu=250;//ovdje podesis width
    for ($i=0;$i<count($_FILES['file']['name']);$i++){
        $ran_num =  mt_rand().mt_rand().mt_rand().mt_rand().mt_rand();
        $allowedExts = array("gif", "jpeg", "jpg", "png", "JPG");
        $allowedTypes=array("image/gif","image/jpeg","image/jpg","image/pjpeg","image/x-png","image/png","image/JPG");
        $temp = explode(".", $_FILES["file"]["name"][$i]);
        $extension = end($temp);
        if (in_array($_FILES['file']['type'][$i],$allowedTypes) && in_array($extension,$allowedExts) && $_FILES["file"]["size"][$i] < 5000000 && $_FILES["file"]["error"][$i]==0) {
            if (file_exists("upload/".$i ."_".$ran_num . $_FILES["file"]["name"][$i])){
            } else {
                if (move_uploaded_file($_FILES["file"]["tmp_name"][$i],"upload/".$i ."_" .$ran_num. $_FILES["file"]["name"][$i])){
                    if (create_thumb("upload/" .$i ."_" .$ran_num. $_FILES["file"]["name"][$i],"upload/" .$i ."_" .$ran_num. $_FILES["file"]["name"][$i],$na_koliku_sirinu)){
                        
                    }
    			    $slika= "/postavi_oglas/". "upload/" .$i ."_" .$ran_num. $_FILES["file"]["name"][$i];
                    $q = mysqli_query($con,"INSERT INTO `automobili_slike` ( `id` , `slika`, `id_oglasa` ) VALUES ( NULL , '".$slika."','".$id_oglasa."' )");
                }
            }
        }
    }
}
?>
1 Like

Ako je taj kod sto mi je @bozoou napisao iznad mog zar se slika onda prvo ne smanjuje pa onda vrsi upload?

Hvala puno momci pogotovo @webdeveloping03 i @bozoou . Sad shvatam sta je sta ovde. Samo sam malo izmenio kod posto mi treba visina od 600px a sirina nek je auto.

$desired_height = 600;
$desired_width = floor($width * ($desired_height / $height));

I ovde sam $na_koliku_sirinu zamenio sa $desired_width :smile:

if (create_thumb("upload/" .$i ."_" .$ran_num. $_FILES["file"]["name"][$i],"upload/" .$i ."_" .$ran_num. $_FILES["file"]["name"][$i],$desired_width))

E sad mi je mnogo lakse i jasnije.Od sutra ce mi se sajt ucitavati 20x brze! :smiley:
Sad mogu i da smanjim slike a i da iskoristim ovo za thumb na pocetnoj a ne da ucitavam sliku od 800x600 pa da je css-om smanjujem,Hvala vam puno jos jednom.
@webdeveloping03 i @bozoou Jel imate vi svoj sajt?

Jel proradilo?

Znači, funkcija se nikako ne stavlja usred petlje. Funkcija jednom definirana se koristi pozivom kao što si vidio kako je na kraju složeno.

A što se tiče redosljeda izvršavanja, kod učitavanja stranice se prvo izvršava php kod, zatim rezultat te radnje se prosljeđuje korisničkom računalu kao HTML. (Onome tko surfa internetom) Njegov browser zna čitati HTML i onda ga parsira tako da omogući tom korisnku funkcionalnost stranice koja je već ugrađena. No korisničke funkcije su uglavnom na razini:
-upali sliku
-ugasi sliku
-tipkaj u polje za tipkanje
-zacrveni neki gumb
-zaplavi neki gumb…itd
-pošalji novi upit na server

Tvoj upload slika spada pod ovu zadnju kategoriju. Forma za upload šalje te slike na server. Nakon što su poslane, izvršavanje se nastavlja na serveru. (opet PHP code). Server znači radi resize slika i pohranjivanje istih u memoriju servera. Inače kako bi slike bile dostupne svima korisnicima koji posjete stranicu??

No za resize, nisam siguran zašto se ne može odvijati na razini javascripta (korisničkog računala) …te tako ubrzati proces uploadanja.
To će valjda znati reći netko pametniji…pretpostavljam da su sigurnosni razlozi posrijedi.

My page : http://oglasnikprijevoza.com/
…ima kad tvoji auto-oglasi postanu popularni, da mi šibneš reklamu gore xd

Priznajem da nisam znao da se funkcija ne stavlja u petlju.E ovo mi puno znaci pri ucenju a ne “hendikepirani rovokopaci” :smile: Posalji mi banner da te reklamiram malo!Zasluzio si! :smiley:Za sad nemam puno poseta (ok 60-70 dnevno) ali bice. :smile: Imam jos dosta stvari da ispopravljam pa cu i ja poceti da se reklamiram. :wink:
Pozdrav!

pa izbaci ti error kad je stavis kak ne treba :confused:
instaliraj si neki dobar editor za code, koji ima u sebi sintakse i help, pomoci ce ti dosta, konkretno za php mozes pogledati phpdesigner, ili pitas ljude da ti preporuce nesto bolje

Koristim Aptanu. Kad je sintaksna greska u pitanju ona prijavi odmah. Ali to sto sam ja pokusavao je s’ te strane bilo Ok. samo sto sam kao output dobijao neke hijeroglife umesto smanjene slike. Hvala jos jednom na pomoci.
Ps. Ako imas svoj sajt posalji mi banner.
Pozdrav.

Onda očito ne razumiješ razliku između globalnih i lokalnih varijabli.

Globalnu varijablu kad jednom definiraš, možeš je koristiti bilo gdje u kodu ili unutar neke druge funkcije…dok lokalne varijable definiraš unutar neke funkcije i koristiš je unutar iste. Onog trena kad se funkcija izvrši, ta varijabla nestaje.

Tako znači možeš imati globalni x=5. On će sad uvijek biti jednako 5, (naravno dok mu ne promjeniš vrijednost). Ali ako unutar funkcije definiraš novi lokalni x=1, onda svaki spomen x-a unutar te funkcije će se odnositi na taj lokalni x. Kad kod završi sa izvršavanjem funkcije, x je opet 5.

Funkcija isto kao x može biti globalna i lokalna.Znači, ako je jednom definiraš izvan neke druge funkcije, ona je globalna…i možeš ju koristiti gdje god ti zatreba.

var x=5;  //ovo je globalni x

function uvecajBrojZaJedan(broj)
   {
   var x=1;  //ovo je lokalni x i ne moze utjecati na globalni x 
   return broj+x;
   }

var uvecanBroj=uvecajBrojZaJedan(x);
alert(uvecanBroj);  //trebalo bi biti 6

P.S. ako se pitaš kakve veze ima usporedba funkcije sa x-som, razmisli o tome da sam mogao i ovako definirati funkciju:

 var uvecajBrojZaJedan=function(broj)
       {
       var x=1;  //ovo je lokalni x i ne moze utjecati na globalni x 
       return broj+x;
       }

…i da, to su osnove osnova objektnog programiranja. Teško ti je jako kopati i sklapati php code ili javascript code bez da ne naučiš osnove. (I php i JS, to su oboje objektno orijentirani jezici)
Zato gubiš noći na pogađanje gdje ćeš što staviti…a za dvije tri noći ćeš svladati osnove objektnog programiranja. Zato neku literaturu iz objektnog programiranja pod ruku (ima toga na hrvatskom) …pa će biti lakše nastaviti sa web programiranjem.

To nisu osnove objektno orijentiranog programiranja, to su osnove programiranja opcenito.

Za drugi bi se slozio, a za prvi bas i ne bih. PHP nije objektno orijentirani jezik, PHP je proceduralni jezik kojem se zele nabiti na silu objektno orijentirane znacajke.