Autor | Zpráva | ||
---|---|---|---|
honz@ Profil * |
#1 · Zasláno: 13. 8. 2011, 08:38:22
Zdravím,
Jsem v PHP začátečníkem a chtěl bych od Vás pomoc. Potřeboval bych, aby se automaticky obrázky ořezaly na čtverec o požadovaných rozměrech. Našel jsem tady na fóru několik let staré vlákno, kde byl tento kód: <?php $path = 'obrazky'; list($src_w, $src_h, $typ)=getimagesize($path); $src_img=imagecreatefromjpeg($path); $big_img=imagecreatetruecolor(150, 150); if($src_w == $src_h) { $s_w = $s_h = 0; $t = $src_w; } elseif($src_w > $src_h) { $t = $src_h; $s_h = 0; $s_w = round(($src_w - $src_h) / 2); } elseif($src_w < $src_h) { $t = $src_w; $s_w = 0; $s_h = round(($src_h - $src_w)/2); } imagecopyresampled($big_img, $src_img, 0, 0, $s_w, $s_h, 150, 150, $t, $t); header('Content-type: image/jpeg'); imagejpeg($big_img); ?> Funguje zcela výborně, ovšem nepodařilo se mi ho upravit tak, aby ořezával hromadně několik obrázků. Napadlo mě to spojit třeba s OpenDir. Díky moc za jakoukoli odpověď! |
||
php Profil |
#2 · Zasláno: 13. 8. 2011, 10:45:42
takhle se ti to boužel nepovede, protože funkce
imagejpeg($big_img); header('Content-type: image/jpeg'); //php manual: header() must be called before any actual output is sent takže by možná šlo místo imagejpeg($big_img); |
||
Alphard Profil |
#3 · Zasláno: 13. 8. 2011, 10:57:56 · Upravil/a: Alphard
opendir() je možné, ale existují i funkce jako glob() nebo scandir().
<?php function cropImage($inPath, $savePath = null) { list($src_w, $src_h, $typ)=getimagesize($inPath); $src_img=imagecreatefromjpeg($inPath); $big_img=imagecreatetruecolor(150, 150); if($src_w == $src_h) { $s_w = $s_h = 0; $t = $src_w; } elseif($src_w > $src_h) { $t = $src_h; $s_h = 0; $s_w = round(($src_w - $src_h) / 2); } elseif($src_w < $src_h) { $t = $src_w; $s_w = 0; $s_h = round(($src_h - $src_w)/2); } imagecopyresampled($big_img, $src_img, 0, 0, $s_w, $s_h, 150, 150, $t, $t); if (!empty($savePath)) { imagejpeg($big_img, $savePath, 85); } else { header('Content-type: image/jpeg'); imagejpeg($big_img); } } foreach (glob("*.jpg") as $filename) { cropImage($filename, $filename); // pozor, takto přepíše původní obrázky } Doplňuji druhý parametr, viz [#5] Alphard. |
||
honz@ Profil * |
#4 · Zasláno: 13. 8. 2011, 11:44:57
Díky moc, ale asi dělám něco špatně, pořád to vypisuje jenom jeden ořezaný obrázek.
|
||
Alphard Profil |
#5 · Zasláno: 13. 8. 2011, 11:59:01
honz@:
Aha, dát tam výpis víc obrázků je vlatně blbost. Buď přidejte parametr pro uložení, nebo to musíte volat jako samostatné soubory. foreach (glob("images/*.jpg") as $filename) { echo '<img src="cropimage.php?path='.urlencode($filename).'">'; } |
||
honz@ Profil * |
#6 · Zasláno: 13. 8. 2011, 12:07:26
Díky, ale pořád nic. Když doplním:
{ echo '<img src="cropimage.php?path='.urlencode($filename).'">'; } sice to vypíše přesný počet souborů, ale s příponou .php. Tak já už nevím, co jsem to zase vymyslel! |
||
Alphard Profil |
#7 · Zasláno: 13. 8. 2011, 12:09:37
Každý soubor s příponou .php musí vrátit jeden obrázek, určený v $_GET['path'].
|
||
honz@ Profil * |
#8 · Zasláno: 13. 8. 2011, 12:13:45
Já se fakt omlouvám, ale nešlo by to, prosím doplnit do toho kódu. Tady s tímhle jsem ještě nedělal. Za jakoukoli odpověď děkuji.
|
||
Alphard Profil |
#9 · Zasláno: 13. 8. 2011, 13:06:25
honz@:
Skoro vše potřebné máte. Html img tagy vykreslí [#5], obrázky vytvoří [#3], tam zavolejte jen cropImage($_GET['path']); , možná bude potřeba upravit cestu, např. cropImage('images/'.$_GET['path']);
Ovšem podotýkám, že by bylo rozumné použít cache, takhle se budou pořád ořezávat obrázky při každém načtení stránky. |
||
honz@ Profil * |
#10 · Zasláno: 13. 8. 2011, 18:55:49
Ano díky moc, vyzkouším.
|
||
Časová prodleva: 13 let
|
0