Načtení obrázku z pc a zobrazení v prohlížeči
- Karel Chramosil
- Člen | 105
Dobrý den,
php 8.1, nette. Snažím se načíst obrázek *.png z pc podle návodu a
nedaří se.
Nevím kde dělám chybu.
Formulář:
$form->addUpload('in_image', 'Vlož obrázek')
//->setRequired(true)
->addCondition(Form::FILLED)
->addRule($form::IMAGE, 'obrázek musí být JPEG, PNG, GIF or WebP.')
->addRule($form::MAX_FILE_SIZE, 'Maximální velikost je 21 mB.', 20 * 1024 * 1024);
$form->addSubmit('obraz', 'Zobraz obrázek►')
->onClick[] = [$this, 'zobrazObrazekFormSubmitted'];
*****************************************************************************
public function zobrazObrazekFormSubmitted(Form $form)
{
$values = $form->getValues();
$image_obraz = Image::fromBlank($this->width_stitek, $this->width_stitek, ImageColor::rgb(255, 255, 255, 0));
Debugger::dump("image_path = ".$values->in_image);
$image_obraz = Image::fromFile($values->in_image);
$image_obraz->save('obrazek_1.png');
Nette hlásí chybu: Nette\Utils\Image::fromFile(): Argument #1 ($file) must be of type string
příkaz vypíše ‚image_path = C:\xampp8_1\tmp\php5A5B.tmp‘
Debugger::dump("image_path = ".$values->in_image);
Dškuji za radu.
Karel Chramosil
- jiri.pudil
- Nette Blogger | 1028
Ta hodnota je instance třídy FileUpload
, která je sice
Stringable, ale string to není. Ale umí se mj. rovnou převést
na Image
- Karel Chramosil
- Člen | 105
Děkuji za odpověď.
Řešení je:
public function zobrazObrazekFormSubmitted(Form $form)
{
$values = $form->getValues();
try {
$image = $values->in_image;
if ($image->isOK()){
Debugger::dump("image_path = ".$image);
//ulozeni;
$image->move('images/pokus.png');
$this->flashMessage('Ukládám obrázek.'.$image, ' success');
}
} catch (NS\AuthenticationException $e) {
$form->addError('Zadaná data nejsou správné.');
}
}
- Kamil Valenta
- Člen | 762
Jsi si jistý, že $image->move() při selhání vykopne AuthenticationException?
- Karel Chramosil
- Člen | 105
Přiznám se nejsem, v bloku try je daleko více parametrů. Používám program několik let a vyjímka nenastala.