Autor Zpráva
matlala
Profil
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
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
š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-
matak
Profil
http://www.webfaq.cz/clanek/Nahled-obrazku-v-PHP-OOP
http://www.webfaq.cz/clanek/Nahled-obrazku-v-PHP-OOP-vyssi-abstrakce
http://www.webfaq.cz/clanek/Allowed-memory-size-of-33554432-bytes-exha usted-tried-to-allocate-2558-bytes
Nadan
Profil
matlala
Prosím tě, označuj kód tagy [pre][/pre]. Kdyby něco, je to to tlačítko <>
matlala
Profil
jj dobře pro příště. Zezelenají a jsou aspon vidět

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0