Autor Zpráva
nethor
Profil
Zdravím, pokouším se generovat obrázek - graf pomocí imagick().
Samotné generování obrázku funguje, ale nedaří se mi to nacpat do třídy. S OOP teprve začínám.
Myšlenka je taková:
1) pomocí __construct založit nový obrázek
2) pomocí sloupec() vykreslit do něj několik sloupců
3) pomocí __destruct() vykreslit výsledek
class graph {
    public $width,$height,$bg_color,$sloupec,$canvas;
    public function __construct($width = 800, $height = 600 , $bg_color = "#fff") {    
        $canvas = new Imagick();        // nový obrázek (pozadí)
        $canvas->newImage($width, $height, new ImagickPixel($bg_color));   // vytvoření obrazku         }    
    public function sloupec($vyska, $pozice) {
        $sloupec->pozice['x']         = 200;    
        $sloupec->pozice['y']         = 40;     
        $sloupec->rozmer['x']         = 40;     //šířka sloupce
        $sloupec->rozmer['y']         = 500;     //výška sloupce
        $sloupec->barva             = "#66f"; 
    
        $draw = new ImagickDraw(); // start vektorové grafiky
        $draw->setFillColor( new ImagickPixel( $sloupec->barva ) );  
        $draw->rectangle ( $sloupec->pozice['x'] , $sloupec->pozice['y'] , $sloupec->pozice['x']+$sloupec->rozmer['x'] - 1 , $sloupec->pozice['y']+$sloupec->rozmer['y'] );
        $canvas->drawImage( $draw );
        }
    public function __destruct() {
        $canvas->flipImage();          // překlopení obrázku
        $canvas->setImageFormat("png");    // formát výsledného obrázku
        header("Content-Type: image/png");
        echo $canvas;    
        }
    }
$graph = new graph();
$graph->sloupec(500,200);
$graph->sloupec(300,300);

Hází mi to Fatal error: Call to a member function drawImage() on a non-object.
Problém je asi s pšenesením prom. $canvas , nevím jak nastavit , aby si uchovala hodnotu i ve fci sloupec().
... nebo co je tam špatně?
Keeehi
Profil
Asi
$this->canvas->drawImage()
ale nejsem si tím jistý
nethor
Profil
Jo funguje, díky.

V celé třídě jsem nahradil $canvas za $this->canvas (kromě deklarace).

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0