Autor Zpráva
JersyWoo
Profil *
Nějak jsem nepochopil jak pořádně funguje změna velikosti u obrázků přes php. Potřeboval bych script který by mi ze vstupního jpg obrázku neznámé velikosti udělal obrázek o velikosti 640x480 jpg. Na serveru mám GD 2.0.8 . Nestvořil jste již někdo podobný script ? Neporadili by jste případně neposkytli script ?
JersyWoo
Profil *
NO odpovím si zatím sám, na jednom webu jsem našel rovnou hotovou funkci přesně jakou potřebuju.

http://macusersforum.com/index.php?showtopic=5431 (anglicky)
Kajman
Profil *
Kdysi jsem to řešil takhle, ale moc pěkné výsledky z toho nebyly. Snad to k inspiraci pomůže.


$nahlx=640;
$nahly=480;
$origname=$_FILES["the_file1"]["tmp_name"]; //proste nejaka cesta k obrazku tohle je z uploadu
$im=imagecreatefromjpeg($origname);
$origx=imagesx($im);
$origy=imagesy($im);
$nahlname="fotky/stredni/".$idau.".jpg";
if (($nahlx/$origx)*$origy>$nahly)
{
$nahlfy=$nahly;
$nahlfx=($nahly/$origy)*$origx;
}
else
{
$nahlfx=$nahlx;
$nahlfy=($nahlx/$origx)*$origy;
}
$imnew = imagecreatetruecolor ($nahlfx, $nahlfy);
imagecopyresized ( $imnew, $im, 0, 0, 0, 0, $nahlfx, $nahlfy, $origx, $origy);
imagejpeg ($imnew,$nahlname);
imagedestroy($imnew);
imagedestroy($im);
Kajman
Profil *
No, asi trošku pozdě :-)
JersyWoo
Profil *
To Kajman: nevadí, proč tam musí být (nebo se většinou používá) imagedestroy ? Copak se tam paměť musí uvolňovat, neuvolní se sama? Jak ten tvůj způsob ale do něčeho uložit? (proměnná, do adresře?)
Kajman
Profil *
Ukládá to třetí řádek od konce. No, když je k něčemu destroy, tak to používám už pro ten pocit, že člověk něco ničí :-)
JersyWoo
Profil *
Takže mohu použít s těmito změnami:

$nahlx=640;

$nahly=480;

$origname=$_FILES["nazev-obrazku"]["cesta-k-obrazku"]; //je to spravně?

$im=imagecreatefromjpeg($origname);

$origx=imagesx($im);

$origy=imagesy($im);

$nahlname="fotky/stredni/".$idau.".jpg"; // nechapu vyznam tohoto radku

if (($nahlx/$origx)*$origy>$nahly)

{

$nahlfy=$nahly;

$nahlfx=($nahly/$origy)*$origx;

}

else

{

$nahlfx=$nahlx;

$nahlfy=($nahlx/$origx)*$origy;

}

$imnew = imagecreatetruecolor ($nahlfx, $nahlfy);

imagecopyresized ( $imnew, $im, 0, 0, 0, 0, $nahlfx, $nahlfy, $origx, $origy);

$vysledny-obrazek= imagejpeg ($imnew,$nahlname); //takze tohle muzu dat treba do promenny

imagedestroy($imnew);

imagedestroy($im);
Kajman
Profil *
Do $origname patří cesta k souboru... třeba 'cesta/obrazek.jpg'.

Pokud tam je novější gd, tak imagecopyresampled dává mnohem lepší výsledek než imagecopyresized. A imagejpeg vrací bool, zda se podařilo uložit soubor (případně ho odeslat na výstup), takže tím si to do proměnné neuložíte.

Pokud nevíte, jaké parametry která fuknce má a co vrací, zkuste si ji najít třeba na www.php.net
Kajman
Profil *
Jo a ten řádek $nahlname="fotky/stredni/".$idau.".jpg"; nastavuje, cestu k souboru, kam se ma ten nový obrázek uložit. Možná je matoucí použití $idau, která byla definováne ještě před ukázkovým kódem.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0