Zmenšování obrázků při uploadu v PHP » PHP scripty » Blog » CrazyDog ~ Multi-blog

Zmenšování obrázků při uploadu v PHP

Čt, 26. červenec 2007, 16:20
Zmenšování obrázků při uploadu v PHP

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.

***** ø 2.9 (797 hlasů) ≈ Návratnost
(Nekonečné stránkování ...) « Starší článek | Novější článek » (Černá okna v Ubuntu a ...)

Š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. !

Zatím 30 komentářů

reaguj - #13Radov So, 28. červenec 2007, 14:33
avatar

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…

MSIE 7.0 / Windows XP
web - reaguj - #14CrazyDog mužv So, 28. červenec 2007, 18:21
avatar

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.
Chyba v adresarich byt nemuze. To by neukazalo chybu. Jen by jsi tam nenasel ten ulozeny obrazek.

Firefox 2.0.0.5 / Ubuntu Linux
reaguj - #16Radov So, 28. červenec 2007, 23:48
avatar

No skusil som to a vypisuje mi to pri vsetkych jpeg obrazkoch: image/pjpeg. Zeby nieco zle v nastaveniach GD ?

MSIE 7.0 / Windows XP
web - reaguj - #18CrazyDog mužv Ne, 29. červenec 2007, 01:26
avatar

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.

Firefox 2.0.0.5 / Ubuntu Linux
reaguj - #19Radov Ne, 29. červenec 2007, 10:51
avatar

Ano mal si pravdu ! Firefox v pohode MSIE chyba. Uz to vsetko funguje dakujem za pomoc…

MSIE 7.0 / Windows XP
reaguj - #20Radov Ne, 29. červenec 2007, 16:00
avatar

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 !

MSIE 7.0 / Windows XP
web - reaguj - #21CrazyDog mužv Ne, 29. červenec 2007, 17:48
avatar

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">

<option value="slozka_1">Složka 1</option> <option value="slozka_2">Složka 2</option> </select>

a misto „./miniatury/“ vlozis $_POST['adresar'] plus nejaka podminka proti sfalsovani neexistujicich aresaru, ale pokud to mas nekde pod heslem, tak to neni treba.

Firefox 2.0.0.5 / Ubuntu Linux
reaguj - #35radiczve Čt, 2. srpen 2007, 21:16
avatar

Tak tohle jsem se snažil vytvořit už dlouho …díky moc šéfe ;)

Firefox 2.0.0.6 / Windows XP
web - reaguj - #36CrazyDog mužve Čt, 2. srpen 2007, 22:13
avatar

radicz: Samozřejmě není zač :)

Firefox 2.0.0.6 / Ubuntu Linux
reaguj - #243Sallyv Po, 10. září 2007, 16:47
avatar

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

Firefox 1.5 / Windows XP
web - reaguj - #244carnerov Po, 10. září 2007, 18:15
avatar

Sally: Chybí Ti na serveru knihovna gd2, kterou PHP pro tyto funkce potřebuje.

Mozilla 5.0 / Linux
reaguj - #245huckv Po, 10. září 2007, 18:20
avatar

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?

Opera 9.22 / Windows XP
web - reaguj - #246CrazyDog mužv Po, 10. září 2007, 19:45
avatar

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.

Firefox 2.0.0.6 / Ubuntu Linux
reaguj - #247huckv Po, 10. září 2007, 20:09
avatar

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 *2*

Opera 9.22 / Windows XP
reaguj - #248huckv Út, 11. září 2007, 11:41
avatar

Tak problém je vyřešen*1*
Jak jsem později zjistil, CHMOD na localhostu je nastaven na 0777*10*
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*5*, omlouvám se že jsem otravoval*12*

Opera 9.22 / Windows XP
web - reaguj - #250CrazyDog mužv Út, 11. září 2007, 20:54
avatar

huck: nj, i to se stane…

Firefox 2.0.0.6 / Ubuntu Linux
reaguj - #254huckve St, 12. září 2007, 11:46
avatar

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?

Opera 9.22 / Windows XP
reaguj - #350Climbergve St, 31. říjen 2007, 00:22
avatar

Ahoj CrazyDogu..
Diky za skript, par triku jsem z nej pouzil ;-) A na jeho konec jsem jeste pridal imagedestroy na uvolneni pameti po $image.

Firefox 2.0.0.8 / Windows XP
web - reaguj - #351CrazyDog mužve St, 31. říjen 2007, 19:27
avatar

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.

Opera 9.24 / Linux
reaguj - #580masterv Út, 29. červenec 2008, 09:43
avatar

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

Firefox 2.0.0.16 / Windows XP
web - reaguj - #581CrazyDog mužv Út, 29. červenec 2008, 16:12
avatar

master: $_FILES[„soubor“][„tmp_name“] je uploadovany nazev a $_FILES[„soubor“][„name“] je finalni nazev.

Firefox 3.0 / Linux
web - reaguj - #591NotSureve St, 24. září 2008, 14:22
avatar

{1} Pls … Kterou podminku?

$obr = imagecreatetruecolor($miniatura, $miniatura/$pomer);
… a zamenit za $miniatura/$pomer ?? THX

Firefox 3.0.1 / Windows Vista
web - reaguj - #592N0tsu123ve St, 24. září 2008, 15:26
avatar

Mnooo, tak uz jsem to vyrsil :-) … super, moc diky … snad jen … jak bych si mohl nastavit kvalitu vysledneho zmenseneho obrazku?

Firefox 3.0.1 / Windows Vista
web - reaguj - #593CrazyDog mužve Čt, 25. září 2008, 20:19
avatar

{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.

Firefox 3.0.2 / Windows XP
reaguj - #736Mistrve St, 20. květen 2009, 15:13
avatar

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.

Firefox 3.0.10 / Windows XP
web - reaguj - #737CrazyDog mužve St, 20. květen 2009, 17:58
avatar

Mistr:

imagejpeg($obr, "./slozka/maly_".$_FILES["soubor"]["name"]); /* Uložime miniaturu do složky */ 

Firefox 3.0.10 / Ubuntu Linux
reaguj - #748Mistrve Čt, 4. červen 2009, 12:29
avatar

A když to chci uložit do kořen. adresáře?

„./slozka/maly_“ = „maly_“ mi to nechce vzít.

Firefox 3.0.10 / Windows XP
web - reaguj - #749CrazyDog mužve Čt, 4. červen 2009, 18:36
avatar

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.

Firefox 3.0.10 / Ubuntu Linux
reaguj - #756Petrrrv Po, 13. červenec 2009, 10:42
avatar

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?

Firefox 3.0.11 / Windows XP
reaguj - #865gewitieta-onlinev Út, 26. leden 2010, 13:29
avatar

velmi zajimave, diky

MSIE 6.0 / Windows
 
0/2000
Jméno*
Web
Email
Gravatar
avatar
  [f] [:)] [L] [XL] [XXL] | [b] [i] [s] [e] [*] [cite] [code] [kod] [h1] [h2] [abbr] [sup] [sub] |
 
nejoblíbenější články:
novinky na webu:
informace: