Nahrání, zmenšení obrázků na serveru ()
- motorcb
- Člen | 552
Zdravim.
Nette 2.0.3. Mám formulář kterým se snažím nahrát obrázek na
server:
protected function createComponentUploadPictureForm()
{
$form = new Nette\Application\UI\Form;
$form->addUpload('avatar', 'Obrázek:')
->addRule(Form::IMAGE, 'Obrázek musí být JPEG, PNG nebo GIF.')
->addRule(Form::MAX_FILE_SIZE, 'Maximální velikost souboru je 1MB', 1 * 1024 * 1024 /* v bytech */);
$form->addSubmit('send', 'Nahrat obrazek');
$form->onSuccess[] = callback($this, 'uploadPictureFormSubmitted');
return $form;
}
a následně obrázek zmenšit a uložit pod zadaným jménem:
Obrázek by se mel jmenovat podle obsahu proměnné:
public function uploadPictureFormSubmitted($form)
{
$values = $form->getValues();
echo $values['avatar']->getName();
//echo $values['avatar']->getType(); //nefunguje - proč?
print_r( $values );
}
Jak dokážu zjistit příponu souboru když ->getType()
nefunguje?
Obrázek chci uložit pod vlastním jménem
- 22
- Člen | 1478
tak mělo by fungovat $values['avatar']->getContentType()
,
pokud máš na serveru splinfo https://api.nette.org/…oad.php.html#91
Editoval 22 (3. 8. 2012 14:22)
- h4kuna
- Backer | 740
A proč chceš typ obrázků když v titulku máš zmenšení obrázku?
typ řešit nemusíš Nette si s tím poradí.
<?php
$img = $values['avatar']->toImage();// vrátí objekt \Nette\Image
?>
Ukázka:
<?php
// $foo, $bar jsou maximální rozměry obrázku,
$img->resize($foo, $bar, Image::SHRINK_ONLY);
$img->save($path);
?>
- h4kuna
- Backer | 740
To co psal JakubTN ti nestačí?
Priponu dokazes zistit napr. takto:
<?php $pripona = pathinfo($values['avatar']->getSanitizedName(), PATHINFO_EXTENSION); ?>
<?php
$values['avatar']->getSanitizedName(); // davá jméno pro filesystem
?>
Případně $values[‚avatar‘]->getName() ti dává originální jméno.
Nevím co v tom hledáš, ale určitě ti chci pomoct.
- motorcb
- Člen | 552
h4kuna:
Ano, odpověď JakubTN (moc děkuji) byla dokonalá, jen Tvoje
odpověď mi přišla trošku zcestná…
Bohužel mi nahraný gif obrázek (který se hejbe) uloží jako statický
gif obrázek.
Nevěděl by někdo jak to vyřešit aby nahraný gif obrázek se i nadále
hejbal (točící zeměkoule se bude točit)?
$pripona = pathinfo($values['avatar']->getSanitizedName(), PATHINFO_EXTENSION);
$image = $values['avatar']->toImage();
$image->resize(100, NULL);
$image->save( "soubor.".$pripona );