Baza modelek Glamour Models: Modelki, Fotomodelki, Hostessy

wtorek, 8 lutego 2011

Renderowanie obrazków w Kohana 3

Aby pokazać obrazek w locie (np. miniaturka, ze znakiem wodnym), w PHP tworzymy obrazek, podajemy typ mime oraz wysyłamy do przeglądarki:
header('Content-type: image/jpeg');
$img = imagecreatefromjpeg('plik.jpeg');
imagejpeg($img);
imagedestroy($img);

W Kohana wygląda to tak:
W kontrolerze np. obrazek.php dodajemy akcję action_render(). Podobnie, jak w czystym PHP, musimy utworzyć obrazek z pliku, podać typ wysyłanych danych, wysłać je w nagłówkach oraz zwrócić wyrenderowany obrazek:
<?php defined('SYSPATH') or die('No direct script access.');

class Controller_Obrazek extends Controller {
        public function action_render(){
            $this->request->headers['Content-type']='image/jpeg';
            $this->request->send_headers();
            $img=Image::factory('media/images/obraz.jpg');
            $this->request->response=$img->render('jpg');
           
        }
}

Wywołujemy następująco:
<?php echo Html::image('obrazek/render'); ?>

W ten sposób można również ukryć ścieżkę do zdjęć.
Oczywiście można przekazać do akcji dowolny obrazek:
<?php echo Html::image('obrazek/render/' . $nazwa_pliku); ?>

<?php defined('SYSPATH') or die('No direct script access.');

class Controller_Obrazek extends Controller {
        public function action_render(){
            $nazwa_pliku=$this->request->param('id'); //zależnie od ustawień w bootstrap.php
            $this->request->headers['Content-type']='image/jpeg';
            $this->request->send_headers();
            $img=Image::factory('upload/' . $nazwa_pliku);
            $this->request->response=$img->render('jpg');
        }
}



2 komentarze:

  1. Niestety dla Kohana 3.1 powyższe postępowanie nie działa. Po wyświetleniu adresu http://mojawitryna.pl/obrazek/render wyświetla się pusta strona.

    Jakiś pomysł ?
    Firebug zwraca content-type tej pustej strony jako text/html a nie image/jpeg.

    Plik na pewno istnieje, bo jak podałem złą ścieżkę, to wyskakiwał error, że plik nie jest obrazkiem. Czyli klasa też się załadowała poprawnie.

    Proszę o pomoc.

    OdpowiedzUsuń
  2. Spróbuj zamienić

    $this->request->response=$img->render('jpg');

    na

    $this->response->body($img->render('jpg'));

    Jest to opisane na
    http://kohanaframework.org/3.1/guide/kohana/upgrading

    OdpowiedzUsuń