Image Response – jak na to?
- Zdeněk Topič
- Člen | 14
Snažím se vrátit si z presenteru obrázek, zkoušel jsem přes FileResponse ale to skončí downloadem obrázku a ještě ke všemu to je nějaký poškozený soubor. Našel jsem na fóru několik let stará řešení, která už ani třeba nefungují a ani jedno dle diskuze nebylo úplně ono tak se ptám kde je po takové době ImageResponse nebo jak tedy mám poslat obrázek na výstup.
Editoval Zdeněk Topič (12. 1. 2013 18:16)
- Zdeněk Topič
- Člen | 14
Dobrá a jak ten obrázek načtu? mám to uložené v jiných příponách a nnejde mě tam dostat žádným rozumným způsobem formát.
Respektive co má být druhý parametr u Image::fromFile(), první je cesta k souboru která je pojmenován neco.file. Z databáze vím, že původní název je neco.jpg a chci ho takto také odeslat do prohlížeče. Tedy jak na to. $image->send() mě asi v outputu ten soubor nepojmenuje jako byl původně.
Editoval Zdeněk Topič (12. 1. 2013 19:15)
- Zdeněk Topič
- Člen | 14
Ano, ale v jiném presenteru budu chtít a proto se ptám dopředu :) Jestli existuje nějaké řešení, které pokryje obě možnosti
- Zdeněk Topič
- Člen | 14
Díky. Stejně to ale nefunguje. Nevím co teda už dělám špatně. Soubor uploaduju jako PNG. V Nette ho zmenším a uložím v JPEG s 80% kvalitou. Uložím si údaj do db. Uložím soubor jako např. „23.file“. Následně ho chci nechat zobrazit následujícím kódem:
public function actionPicture($username)
{
$user = $this->model->users->findOneBy(array("username" => $username));
$response = new ImageResponse($user->image->path);
$this->sendResponse($response);
}
Po obrázku ani vidno, Nette nehlásí žádnou chybu, ale obrázku prostě není. Adresa pro zobrazení obrázku je ve tvaru „/user/picture/<username>“. Zobrazí se prázdno s přeškrknutým obrázkem/stránkou.
Prosím o radu nebo si řekněte co potřebujete vědět.
- Zdeněk Topič
- Člen | 14
Uložení obrázku je provedeno následovně:
$img->save(WWW_DIR . '/files/uploads/' . $file->id . '.file', 80, \Nette\Image::JPEG);
Pokud daný .file stáhnu z FTP, přejmenuju na .jpg tak není problém ho otevřít a obrázek se zobrazí.