Načtení obrázku z pc a zobrazení v prohlížeči

Karel Chramosil
Člen | 105
+
0
-

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
+
0
-

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
+
0
-

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
+
+2
-

Jsi si jistý, že $image->move() při selhání vykopne AuthenticationException?

Karel Chramosil
Člen | 105
+
0
-

Přiznám se nejsem, v bloku try je daleko více parametrů. Používám program několik let a vyjímka nenastala.