dataStream png se vygeneruje jako jpg
- 2bfree
- Člen | 248
V nejnovější verzi Nette pro PHP 5.3 jsem narazil na problém s latte helperem dataStream a obrázky jiného typu než jpg.
Pokud jsem to správně pochopil, tak latte helper dataStream neboli \Nette\Templating\DefaultHelpers::dataStream() očekává jako vstupní parametr $data výstup z \Nette\Image->__toString() který zavolá přímo \Nette\Image->toString(), aniž by určil typ obrázku.
Zde se tedy použije defaultní nastavení viz: public function toString($type = self::JPEG, $quality = NULL).
Takže pokud bych měl následující latte šablonu jako je v nápovědě:
{var $img = \Nette\Image::fromFile($cesta_k_png_souboru)}
<img src="{$img|dataStream}"/>
Editoval 2bfree (1. 2. 2012 12:34)
- 2bfree
- Člen | 248
V podstatě když chci, aby příklad opravdu fungoval dle očekávání, tak to musím upravit následovně
{var $img = \Nette\Image::fromFile($cesta_k_png_souboru)->toString(exif_imagetype($cesta_k_png_souboru))}
<img src="{$img|dataStream}"/>
Což už k eleganci ostatních Nette funkcí má poněkud daleko že?
- 2bfree
- Člen | 248
Praktické a děkuji nicméně by stálo za to provést
- upravit původní nápovědu aby neobsahovala chybný návod
nebo
- upravit funkci \Nette\Image->__toString() a \Nette\Image->toString() aby vracela obrázek původního datového typu.
BTW: kdyby někdo potřeboval, tak latte macro které převede obrázek na dataStream
<?php
$template = new \Nette\Templating\Template();
$template->registerFilter($latte = new \Nette\Latte\Engine);
$set = new \Nette\Latte\Macros\MacroSet($latte->parser);
$set->addMacro('@src', 'echo \'src="\' . \Nette\Templating\DefaultHelpers::dataStream(file_get_contents(%node.word)) . \'"\' ');
?>
užití je:
{var $basePath = '/var/www/project_name/www'}
<img n:src="{$basePath}/assets/img/obrazek.png" />