Jelikož mnoho z vás upravuje obrázky ručně pro své fotogalerie a přitom to jde snadno přes GD knihovnu v PHP. Nejdůležitější je aby váš hosting tuto knihovnu měl, ale většina hostingu ji má již v základu.
Celý script by mohl vypadat nějak takto:
<?php $zob = "ne"; if($_POST["odeslano"] == "ano") { /* ochrana */ if($_FILES["soubor"]["error"]) { $zob = "ano"; echo "Nebyl vybrán žádný obrázek!"; } else { $rozmer_av = getimagesize($_FILES["soubor"]["tmp_name"]); if($_FILES["soubor"]["type"] != "image/jpeg" AND $_FILES["soubor"]["type"] != "image/jpg" AND $_FILES["soubor"]["type"] != "image/pjpeg") { $zob = "ano"; echo "Obrázek může být jen ve formátu JPEG!"; } if($rozmer_av[0] > 480) { $zob = "ano"; echo "Obrázek může mít maximální šířku 480px!"; } } } else { $zob = "ano"; } if($zob == "ano") { ?> <form method="post" enctype="multipart/form-data" action="test.php"> <p><input type="file" name="soubor" /></p> <p><input type="submit" value="Uložit" /></p> <p><input type="hidden" name="odeslano" value="ano" /></p> </form> <?php } else { $miniatura = 145; /* šířka zmenšené fotky */ $rozmery = getimagesize($_FILES["soubor"]["tmp_name"]); $pomer = $rozmery[0]/$rozmery[1]; $obr = imagecreatetruecolor($miniatura, $miniatura/$pomer); $image = imagecreatefromjpeg($_FILES["soubor"]["tmp_name"]); imagecopyresampled($obr, $image, 0, 0, 0, 0, $miniatura, $miniatura/$pomer, $rozmery[0], $rozmery[1]); imagejpeg($obr, "./miniatury/".$_FILES["soubor"]["name"]); /* Uložime miniaturu do složky */ imagedestroy($obr); /* A odstranime z Cache */ move_uploaded_file($_FILES["soubor"]["tmp_name"], "./original/".$_FILES["soubor"]["name"]); /* A uložime oroginál */ /* Zde může být zapis do databáze */ echo "Foto uploadnuto"; } ?>Tento script je upraveny na to, že můžete uloadnout jen obrázek s maximální šířkou 480px jen ve formátu JPEG a s výslednou šířkou 145px. Výška miniatury se přizpůsobuje šířce, takže výsledný obrázek nebude nijak deformovaný. Šířku si můžete upravit dle svého, ale formát je už složitější, ale zkušenější to jistě zvládnou sami.
Štítky:
PHP,
tutoriál,
zobrazit všechny štítky
! Našli jste v článku gramatické či pravopisné chyby? Je to z důvodu autorovy nemoci zvané dysgrafie. Tudíž všem děkuji za pochopení a každý článek pokud možno nechávám projít korekturou. !
Mne to stale vypisuje: Obrázek může být jen ve formátu JPEG! aj ked je obrazok v tomto formate ! Predpokladam ze chyba moze byt niekde v adresaroch do ktorych sa obrazky ukladaju…
Rado: But to opravdu neni JPEG a nebo je nekde chyba, ale me to funguje. Spis to neni JPEG. Zkus ten obrazek otestovat.
<form method="post" enctype="multipart/form-data" action="test.php"> <p><input type="file" name="soubor" /></p> <p><input type="submit" value="Zjisti" /></p> <p><input type="hidden" name="odeslano" value="ano" /></p> </form> <?php if($_POST["odeslano"] == "ano") { echo $_FILES["soubor"]["type"]; } ?>A napis mi sem co ti to vypsalo. Podle toho kdyz tak upravim ten script.
No skusil som to a vypisuje mi to pri vsetkych jpeg obrazkoch: image/pjpeg. Zeby nieco zle v nastaveniach GD ?
Rado: Snad opraveno. Zkus ten script otestovat ted.
Jinak myslim ze to chyba GD neni, ale ted jsem si cetl, ze nektere jpg se znaci jako jpeg, jpg ci pjpeg. Tak jsem to o tyto tri typy rozsiril. Dej mi kdyz tak vedet.
Tak uz jsem na to prisel. Ty ten script zkousis v MSIE, ze? Ten rika obrazku, ze je pjpeg. Kdyby jsi to testoval napr ve Firefoxu, tak by se znacil jako jpeg.
Ano mal si pravdu ! Firefox v pohode MSIE chyba. Uz to vsetko funguje dakujem za pomoc…
Este by si mohol upravit ten skript tak aby tam bola moznost nastavenia priamo pri uploade do ktoreho adresara sa ma obrazok nahrat. To by bolo super !
No, da se to udelat, ze se obrazek ulozi do existujicich adresaru, coz je lehke nebo kdyz neexistuje, tak se vytvori novy, ale to je uz kapanek tezsi a script by se o dost prodlouzil. Ja bych to tak nechal a jestli chces ty vyber adresaru, tak si mezi <fomr> vloz:
<select name="adresar">a misto „./miniatury/“ vlozis $_POST['adresar'] plus nejaka podminka proti sfalsovani neexistujicich aresaru, ale pokud to mas nekde pod heslem, tak to neni treba.<option value="slozka_1">Složka 1</option> <option value="slozka_2">Složka 2</option> </select>
Tak tohle jsem se snažil vytvořit už dlouho …díky moc šéfe ;)
radicz: Samozřejmě není zač :)
Cau, prosim te, háže mi to tuto chybu nevíš co s tím:
Fatal error: Call to undefined function: imagecreatetruecolor() in c:\apache\htdocs\upload zase\index.php on line 29
Sally: Chybí Ti na serveru knihovna gd2, kterou PHP pro tyto funkce potřebuje.
No, já se pokouším o takovou jednoduší galerii a tenhle skript by se mi tam celkem hodil, ale z nějakého důvodu mi to píše chybu na řádku, kde je ta fce. „imagejpeg($obr, “./miniatury/„.$_FILES["soubor“][„name“]);".
Unable to Open ?tady je cesta k obrazku? for writing.
Mohlo by to mít něco společného s tím, že to zkouším rozběhnout na localhostu?
huck: Musíš mít vytvořenou složku miniatury a ta musí mít chmod 777. Jinak s localem to nemá nic společného pokud je dobré nastaven.
No já jsem se asi špatně vyjádřil, tím localhostem jsem myslel, že mám nainstalovaný apache server na mém PC bez internetu a na lokálním disku se číselně CHMOD nezobrazuje(skousel jsem to v Total Com).
Takze problem je spis ten, ze nevim jak nastavit CHMOD
Tak problém je vyřešen
Jak jsem později zjistil, CHMOD na localhostu je nastaven na 0777
V tom problém nebyl, já tu složku co jsem vytvořil pojmenoval orginal a ne „original“, takze to byla celou dobu moje chyba, omlouvám se že jsem otravoval
huck: nj, i to se stane…
Ahoj:) Ještě bych měl jeden dotaz. Chtěl bych, aby se mi veškeré obrázky co zmenším vlezly do rozměru 150x150 px. To znamená, že když je šířka obrázku větší než výška je všechno v pořádku, ale naopak to nefunguje. např. obr. 500x800 je zmenšený 150x240, ten se mi tam ale nevleze.
Nevíš jak by to šlo udělat, aby ho zmenšil v původním poměru, ale tak hodně aby se do požadovaných rozměrů vlezl?
Ahoj CrazyDogu..
Diky za skript, par triku jsem z nej pouzil ;-) A na jeho konec jsem jeste pridal imagedestroy na uvolneni pameti po $image.
Climberg: Vždyť to tam je imagedestroy($obr); /* A odstraníme z Cache */
huck: Samozřejmě to jde. Stačí podmínka a zaměnit $miniatura za $miniatura/$pomer.
A jak mám vypsat název toho obrázku? Abych ho pak mohl uložit do db. Jsem to košel a vždy mi to vypsalo chybu. THX
master: $_FILES[„soubor“][„tmp_name“] je uploadovany nazev a $_FILES[„soubor“][„name“] je finalni nazev.
{1} Pls … Kterou podminku?
$obr = imagecreatetruecolor($miniatura, $miniatura/$pomer);… a zamenit za $miniatura/$pomer ?? THX
Mnooo, tak uz jsem to vyrsil :-) … super, moc diky … snad jen … jak bych si mohl nastavit kvalitu vysledneho zmenseneho obrazku?
{69} Tak, že místo
imagejpeg($obr, "./miniatury/".$_FILES["soubor"]["name"]);dáš
imagejpeg($obr, "./miniatury/".$_FILES["soubor"]["name"], 75);Kde ta 75 znamená procentuální kvalita. Standardně se mi zda, že to je okolo té 70, tak si to můžeš zvětšit na 100, ale bude ti více zabírat.
Ahoj, chtěl jsem si to změnit, aby to obrázek uložilo jako maly_nazev a velky_nazev do stejneho souboru, kdyz jsem to upravil misto .„./miniatury“. na .„maly_“. , tak to neufunguje.
Mistr:
imagejpeg($obr, "./slozka/maly_".$_FILES["soubor"]["name"]); /* Uložime miniaturu do složky */
A když to chci uložit do kořen. adresáře?
„./slozka/maly_“ = „maly_“ mi to nechce vzít.
Mistr: Když do kořenového adráře, tak místo tak jen ./maly_*** připadně ../maly*** podle toho v jakém adresáři provádíš akci. Nezapomeň že chmod musí být 777.
slo by jeste udelat ze se muze nahrat jakykoli obrazek / velikostne / ale zmensil by se na miniaturu a ten original jeste na max. treba 800 na 600 ?? a jak je to s pomerem stran kdyz je obrazek nahravan na vysku?