PHP [ERLEDIGT] CakePHP / imagecreatefromstring / animated GIF

M3Y3R

Well-known member
ID: 336361
L
8 Mai 2006
1.608
60
Hallo zusammen,

ich versuche mich ein wenig in CakePhp und habe mir dafür ein kleines Projekt ausgedacht.
Es soll eine Signatur-Rotation erstellt werden. Dazu werden wird sowohl der Href, als auch die Image-Source in einer Datenbanktabelle festgehalten.

Da ich weder in von der Image-Größe, noch von Typ abhängig sein möchte, wird das Image via Link angegeben. Als Beispiel habe ich dieses hier verwendet. Das Image wird mittels file_get_contents() ausgelesen. In der View soll dann das Image über imagecreatefromstring() wieder erstellt werden um unter anderem auch eine Einbindung in Foren-Signaturen via BB-Code zu ermöglichen. Es wird auch ein Image angezeigt, jedoch ohne Animation...

Kann man irgendwie über die PHP-seitigen Image-Methoden das animierte GIF erstellen?
Mein entsprechender Quellcode sieht aktuell wie folgt aus:

/src/Controller/RotateController (Methode: __showBanner())
PHP:
if(!is_null($banner)){
    list($width, $height, $type, $attr) = getimagesize($banner->image);
    $imageType      = $type;
    $imageContent   = file_get_contents($banner->image);

    if(!$imageContent) {
        $imageContent = $this->__createNewImage(__('Error'));
    }
}
else {
    $imageType      = IMAGETYPE_PNG;
    $imageContent   = $this->__createNewImage('No Banner available');
}
        
$image = array(
    'type' => $imageType,
    'mime' => image_type_to_mime_type($imageType),
    'extension' => image_type_to_extension($imageType, false),
    'content' => $imageContent
);

$this->set(compact('image'));

/src/Template/Layout/Rotate/view.ctp
PHP:
<?= $this->fetch('content') ?>

/src/Template/Rotate/view.ctp
PHP:
$this->response->type($image['mime']);
$imageString = imagecreatefromstring($image['content']);
call_user_func('image' . $image['extension'], $imageString);
imagedestroy($image);
 
Zuletzt bearbeitet:
Habe zwischenzeitlich eine Lösung gefunden:
/src/Controller/RotateController (Methode: __showBanner())
PHP:
if(!is_null($banner)){
    $image = array('url' => $banner->image);
    list($image['width'], $image['height'], $image['type'], $image['attr']) = getimagesize($banner->image);
    $image['mime'] = image_type_to_mime_type($image['type']);
    $image['extension'] = image_type_to_extension($image['type'], false);

    $this->set(compact('image'));
    $this->render('view');
}
else {
    $image['type']      = IMAGETYPE_PNG;
    $image['mime']      = image_type_to_mime_type($image['type']);
    $image['extension'] = image_type_to_extension($image['type'], false);
    $image['content']   = $this->__createNewImage('No Banner available');

    $this->set(compact('image'));
    $this->render('error');
}

/src/Template/Layout/Rotate/view.ctp
PHP:
<?= $this->fetch('content') ?>

/src/Template/Rotate/view.ctp
PHP:
$this->response->type($image['mime']);
readfile($image['url']);

/src/Template/Rotate/error.ctp
PHP:
$this->response->type($image['mime']);
call_user_func('image' . $image['extension'], $image['content']);
imagedestroy($image['content']);