Codeschnipsel - ImageClass

Ein kleines Script um Bilder wie nicht mehr über reine Funktionen anzusprechen, sondern über OOP.

class MyImage {
    protected $handle = null;

    public function __call($name,$args){
        $realName = 'image'.$name;
        array_unshift($args, $this->handle);
        if (!function_exists($realName)){
            throw new Exception('Diese Funktion existiert nicht.');
        }
        return call_user_func_array($realName,$args);
    }

    public function create($width=0,$height=0){
        $this->handle = imagecreate($width, $height);
    }

    public function createtruecolor($width=0,$height=0){
        $this->handle = imagecreatetruecolor($width, $height);
    }

    public function load($file='',$mime='png'){
        if (!file_exists($file)){
            throw new Exception('Diese Datei ist nicht vorhanden');
        }

        switch ($mime) {
            case 'gd': $this->handle = imagecreatefromgd($file); break;
            case 'gif': $this->handle = imagecreatefromgif($file); break;
            case 'gd2': $this->handle = imagecreatefromgd2($file); break;
            case 'png': $this->handle = imagecreatefrompng($file); break;
            case 'xpm': $this->handle = imagecreatefromxpm($file); break;
            case 'xbm': $this->handle = imagecreatefromxbm($file); break;
            case 'wbmp': $this->handle = imagecreatefromwbmp($file); break;
            case 'jpeg': $this->handle = imagecreatefromjpeg($file); break;
            case 'jpg': $this->handle = imagecreatefromjpeg($file); break;
            case 'string': $this->handle = imagecreatefromstring($file); break;
            default:
                throw new Exception('Kein korrekter MIME-Type');
                break;
        }

        $this->mime = $mime;
        return true;
    }

}
//Beispiel:
$image = new MyImage();
$image->createtruecolor(100,100);

Wie Ihr vermutlich sehen könnt macht die Klasse nichts anderes als alle Methodenaufrufe über die __call() abzufangen und 'image' vorne dranzuhängen. Ausgenommen sind hierbei das erstellen des Bildes und das Laden aus einer Ressource, da die Bildresource da mit $this->handler verknüpft werden muss. Außerdem wird das erstes Argument der ImageHandler angefügt, da der bei jeder Bildfunktion als erstes benötigt wird und man den dadurch weglassen kann, da er automatisch von dem Objekt verwaltet wird. Anschließend wird überprüft ob die Funktion überhaupt existiert, wenn nicht wird eine Exception geworfen. Ansonsten wird einfach die Funktion aufgerufen und der return-Wert wird zurückgegeben.

Kann man mögen, muss man aber nicht. Ich jedoch arbeite lieber mit der OOP-Syntax als mit Funktionen. Außerdem kann man die Klasse oben sehr einfach erweitern, um z.B. Farben zwischen zuspeichern.



Impressum | Sitemap

Zum Schließen auf das Bild klicken.