Autor | Zpráva | ||
---|---|---|---|
matlala Profil |
#1 · Zasláno: 1. 4. 2008, 08:37:30
ahoj,
Na webu potřebuju zmenšovat fotky pro náhledy, použil jsem staré známé nahrávání to funguje, ale nefunguje mi zmenšit fotku. Místo toho aby se uložila zmenšenina se vypíše nekolik desítek řádků hatlamatilky(nesmyslné znaky) tu je můj kod, chyba bude nekde ve funkci Resizer, kterou jsem zkopčil z http://trupik.aspweb.cz/programovani/php/thumbnaily-v-php.aspx <?php function Resizer( $filename, //cesta k souboru, ktery chcete zmensit $copypath="fotky-male", //cesta, kam zmenseny soubor ulozit $MaxWidth=150, //maximalni sirka zmenseneho obrazku $MaxHeight=150) //maximalni vyska zmenseneho obrazku { //zjistime puvodni velikost obrazku list($OrigWidth, $OrigHeight) = getimagesize($filename); //hodnota 0 v parametrech MaxWidth resp. MaxHeight znamena, //ze sirka resp. vyska vysledku muze byt libovolna if ($MaxWidth == 0) $MaxWidth = $OrigWidth; if ($MaxHeight == 0) $MaxHeight = $OrigHeight; //nyni vypocitam pomer zmenseni $pw = $OrigWidth / $MaxWidth; $ph = $OrigHeight / $MaxHeight; if ($pw > $ph) $p = $pw; else $p = $ph; if ($p < 1) $p = 1; //v p ted mame pomer pro zmenseni //vypocitame vysku a sirku zmenseneho obrazku $NewWidth = (int)$OrigWidth / $p; $NewHeight = (int)$OrigHeight / $p; //vytvorime novy obrazek pozadovane vysky a sirky $image_p = imagecreatetruecolor($NewWidth, $NewHeight); //otevreme puvodni obrazek se souboru $image = imagecreatefromjpeg($filename); //a okopirujeme zmenseny puvodni obrazek do noveho imagecopyresampled($image_p, $image, 0, 0, 0, 0, $NewWidth, $NewHeight, $OrigWidth, $OrigHeight); //a ulozime imagejpeg($image_p, $copypath, 100); } $url="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; echo"<html> <head> <title>Upload souborů</title> </head> <body> <center><form action=\"".$url."\" method=\"post\" enctype=\"multipart/form-data\"> <input type=\"file\" name=\"fupload\"> <input type=\"submit\" value=\"Nahrát\"> </form></center>"; if (isset($_FILES['fupload'])) { $slozka = "fotky-velke"; $cil = $slozka . "/" .$_FILES['fupload']['name']; $nazevSouboru = $_FILES['fupload']['tmp_name']; // Zjistí dočastné umístění souboru $copy = move_uploaded_file($nazevSouboru, $cil) // A tady zkopíruje soubor z dočastného umístění do cílového souboru a složky or die ("Přenesený soubor č1 nelze zkopírovat"); // A pokud se nepovede, tak vypíše tuto hlášku chmod ($cil, 0777); // Ještě na soubor vyhodíme funkci chmod, která změní jeho práva na maximum, pokud by soubor psal chybu změňte 0644 na 0777 if($copy == true){ // Pokud se kopírování provede úspěšně echo "Soubor " .$_FILES['fupload']['name']. " byl úspěšně nahrán na server.\n<br><a href=\"$cil\"> ukázat nezmenšenu fotku</a>"; }else{ echo "Soubor nemohl být nahrán.\nPočet chyb: " . $_FILES['fupload']['error']; } $ss="fotky-male/".$_FILES['fupload']['name']; Resizer($cil, $ss);//cesta k původnímu souboru, cesta kam má být zmenšený obrázek uložen } echo" </body> </html>"; ?> dík za rady, Petr |
||
matlala Profil |
#2 · Zasláno: 1. 4. 2008, 09:05:36
vyřešeno, ani nevím jak tu je můj konečný script, možná to nekomu pomůže:
<? function ZmenciFotku( $filename, //cesta k souboru, ktery chcete zmensit třeba fotky-velke/soubor.jpg $copypath, //kompletní cesta, kam zmenseny soubor ulozit např fotky/soubor.jpg $MaxWidth=150, //maximalni sirka zmenseneho obrazku $MaxHeight=150) //maximalni vyska zmenseneho obrazku { //zjistime puvodni velikost obrazku list($OrigWidth, $OrigHeight) = getimagesize($filename); //hodnota 0 v parametrech MaxWidth resp. MaxHeight znamena, //ze sirka resp. vyska vysledku muze byt libovolna if ($MaxWidth == 0) $MaxWidth = $OrigWidth; if ($MaxHeight == 0) $MaxHeight = $OrigHeight; //nyni vypocitam pomer zmenseni $pw = $OrigWidth / $MaxWidth; $ph = $OrigHeight / $MaxHeight; if ($pw > $ph) $p = $pw; else $p = $ph; if ($p < 1) $p = 1; //v p ted mame pomer pro zmenseni //vypocitame vysku a sirku zmenseneho obrazku $NewWidth = (int)$OrigWidth / $p; $NewHeight = (int)$OrigHeight / $p; //vytvorime novy obrazek pozadovane vysky a sirky $image_p = imagecreatetruecolor($NewWidth, $NewHeight); //otevreme puvodni obrazek se souboru $image = imagecreatefromjpeg($filename); //a okopirujeme zmenseny puvodni obrazek do noveho imagecopyresampled($image_p, $image, 0, 0, 0, 0, $NewWidth, $NewHeight, $OrigWidth, $OrigHeight); //a ulozime imagejpeg($image_p, $copypath, 100); chmod ($copypath, 0777);//ještě zmeníme chmod na 0777, abychom potom mohli mazat fotky přimo //v prohlížeči, když máme administraci, pokud nemáme ničemu to nevadí } echo"<center><form action=\"".$url."\" method=\"post\" enctype=\"multipart/form-data\"> <input type=\"file\" name=\"fupload\"> <input type=\"submit\" value=\"Nahrát\"> </form></center>"; if (isset($_FILES['fupload'])) { $id=(int)$_GET['id']; $datum=date("Y-m-d"); $konecnyNazevSouboru=$id."_".$datum".jpg"; $cil = "fotky-velke/".$konecnyNazevSouboru; $nazevSouboru = $_FILES['fupload']['tmp_name']; // Zjistí dočastné umístění souboru $copy = move_uploaded_file($nazevSouboru, $cil)// A tady zkopíruje soubor z dočastného umístění do cílového souboru a složky or die ("Přenesený soubor č1 nelze zkopírovat"); // A pokud se nepovede, tak vypíše tuto hlášku chmod ($cil, 0777); // Ještě na soubor vyhodíme funkci chmod, která změní jeho práva na maximum, pokud by soubor psal chybu změňte 0644 na 0777 if($copy == true){ // Pokud se kopírování provede úspěšně echo "Soubor " .$_FILES['fupload']['name']. " byl úspěšně nahrán na server.\n<br><a href=\"$cil\"> ukázat nezmenšenu fotku</a>"; $zmensenina="fotky-male/".$konecnyNazevSouboru; ZmenciFotku($cil, $zmensenina, 150, 150);//cesta k původnímu souboru, cesta kam má být zmenšený obrázek uložen echo"<br><a href=\"".$zmensenina."\">zmenšenina</a>"; }else{ echo "Soubor nemohl být nahrán.\nPočet chyb: " . $_FILES['fupload']['error']; } |
||
matak Profil |
#3 · Zasláno: 1. 4. 2008, 18:35:11
škoda, že jsem chybu z příspěvku neodhalil, ale přihodím odkaz (doufám že to není proti politice tohoto serveru), další pohled na řešení náhledů
http://www.webfaq.cz/clanek/Nahled-obrazku-v-PHP-OOP- http://www.webfaq.cz/clanek/Nahled-obrazku-v-PHP-OOP-vyssi-abstrakce a jestě problém, který vás může při zpracování potkat http://www.webfaq.cz/clanek/Allowed-memory-size-of-33554432-bytes-exha usted-tried-to-allocate-2558-bytes- |
||
Časová prodleva: 25 dní
|
|||
matak Profil |
#4 · Zasláno: 26. 4. 2008, 11:12:41 · Upravil/a: matak
|
||
Nadan Profil |
#5 · Zasláno: 26. 4. 2008, 11:22:07 · Upravil/a: Nadan
matlala
Prosím tě, označuj kód tagy [pre][/pre]. Kdyby něco, je to to tlačítko <> |
||
Časová prodleva: 9 dní
|
|||
matlala Profil |
#6 · Zasláno: 5. 5. 2008, 19:53:19
jj dobře pro příště. Zezelenají a jsou aspon vidět
|
||
Časová prodleva: 16 let
|
0