| 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 senttakž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: 14 let
|
|||
0