dataStream png se vygeneruje jako jpg

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
2bfree
Člen | 248
+
0
-

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

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?

voda
Člen | 561
+
0
-

Můžeš vynechat Nette\Image a použít rovnou

<img src="{file_get_contents($cesta_k_png_souboru)|dataStream}"/>
2bfree
Člen | 248
+
0
-

Praktické a děkuji nicméně by stálo za to provést

  1. upravit původní nápovědu aby neobsahovala chybný návod

nebo

  1. 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" />