Načtení otočeného obrázku v prohlížeči
- dotTwelve
- Člen | 167
Pomocí signálu otáčím obrázky (source i thumb), ale po provedení je
na ftp všechno v pořádku, obrázky jsou otočené, ale po přesměrování
$this->redirect('this');
se v prohlížeči nové nenačtou.
Nové otočené obrázky se načtou až po kliknutí na refresh (F5)
v samotném prohlížeči. Přikládám náhled na samotný handle (funkce
rotateImage
je proto, jelikož na hostingu není GD knihovna
bundled).
<?php
public function handleRotate($file, $fileThumb, $angle) {
$file = WWW_DIR . '/' . $file;
$fileThumb = WWW_DIR . '/' . $fileThumb;
$image = @imagecreatefromjpeg($file);
$imageThumb = @imagecreatefromjpeg($fileThumb);
$image = $this->rotateImage($image, $angle);
$imageThumb = $this->rotateImage($imageThumb, $angle);
imagejpeg($image, $file, 100);
imagejpeg($imageThumb, $fileThumb, 100);
imagedestroy($image);
imagedestroy($imageThumb);
$this->flashMessage("Fotografie byla otočena.", 'info');
$this->redirect('this');
}
?>
Asi bude problém s cache v prohlížeči.
- iguana007
- Člen | 970
přesně … tam kde voláš ten obrázek v HTML stačí přidat otazník a za něj timestamp, to by ti mělo zaručit, že si prohlížeč natáhne nový obrázek, protože mu jméno nebude sedět. Možná nejlíp timestamp chvíle, kdy byl obrázek otočen, aby se do cache přeci jen uložil, ale ten správný a otočený. Případně upravit hlavičky, to by imho mohlo taky pomoci.
Editoval iguana007 (17. 6. 2010 0:24)
- dotTwelve
- Člen | 167
Takze nemam presmerovavat redirectem, ale mam si napriklad do sablony po
provedeni handlu hodit promennou, ktera kdyz bude tak zavola javascriptovou
funkci refresh()?
Radsi bych to resil poslanim hlavicky no-cache, ale nevim jak na to, kdyz to
chci pouze u tohoto handlu v presenteru.
Toto funguje, ale neni to prasarna? Neda se to napsat lepe?
<?php
public function actionEdit($id = 0) {
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
...
}
?>
Editoval dotTwelve (17. 6. 2010 10:05)
- na1k
- Člen | 288
Tohle ti ale zakáže cache pro celou stránku a to by mohla být škoda. Ikdyž pokud by jsi to měl jen na té jedné „otáčecí“ stránce, asi by se to dalo překousnout.
Přidáním timestampu do cesty obrázku
(/gfx/obrazek.png?t=1234567
) omezíš to vypnutí cache jen na
obrázek. Z pohledu prohlížeče bude při každém načtení jiná hodnota
času, a tím to bude brát jako dva různé obrázky.
Ideální by ale bylo, kdyby jsi mohl rozlišit mezi otočeným a
neotočeným obrázkem, a timestamp nahradit nějakým příznakem otočení.
Fungovalo by to následovně – dokud by šel požadavek na
obrazek.png?otoceny=0
, prohlížeč by si ho mohl držet v cache;
pak by šlo volání otáčecí funkce a adresa by se změnila na
obrazek.png?otoceny=1
, což by přinutilo prohlížeč natáhnout
novou verzi, ale tu by pak mohl opět cachovat. To ale záleží na tom, jakou
máš strukturu stránky a jestli se ti vyplatí zjišťovat otočenost anebo
jsou obrázky tak malé, že raději oželíš jejich cachování.
Editoval na1k (17. 6. 2010 10:39)