Start · Sprachen · PHP · Referenz · GdImage

GdImage

Klasse

Opake Klasse, die ab PHP 8.0.0 die bisherigen GD-Ressourcen (<code>resource</code>) repräsentiert und ersetzt.

seit PHP 8.0.0 Kategorie: image

Signatur

class GdImage

Beschreibung

GdImage ist eine vollständig opake Klasse, die seit PHP 8.0.0 als typsicherer Ersatz für den zuvor verwendeten resource-Typ bei GD-Bildobjekten eingeführt wurde. Alle GD-Funktionen wie imagecreatetruecolor(), imagecreatefromjpeg() oder imagecopy() geben nun ein GdImage-Objekt zurück bzw. erwarten eines als Parameter.

Die Klasse selbst besitzt keine öffentlichen Methoden oder Eigenschaften – sie dient ausschließlich als typsicherer Wrapper um die interne GD-Struktur. Da sie opak ist, kann man weder von ihr erben noch eine eigene Instanz davon direkt erzeugen. Instanzen werden ausschließlich durch GD-Funktionen erstellt.

Der Hauptvorteil gegenüber dem alten resource-Typ ist die Möglichkeit, GdImage als Typangabe in Funktionssignaturen zu nutzen (function process(GdImage $img): void), was den Code robuster und selbstdokumentierender macht. Außerdem profitiert man von der automatischen Garbage-Collection: Sobald keine Referenz mehr auf das Objekt existiert, wird es freigegeben – ein manuelles imagedestroy() ist nicht mehr zwingend notwendig, bleibt aber aus Kompatibilitätsgründen verfügbar.

In PHP 7.x und älter liefern die GD-Funktionen stattdessen einen resource-Wert; Code, der auf beiden Versionen laufen soll, sollte die Typprüfung entsprechend anpassen oder auf is_object() / get_resource_type() ausweichen.

Beispiele

GdImage als Typ-Hint in einer Bildverarbeitungs-Funktion

<?php
function resizeImage(GdImage $source, int $width, int $height): GdImage
{
    $resized = imagescale($source, $width, $height);
    if ($resized === false) {
        throw new RuntimeException('Skalierung fehlgeschlagen.');
    }
    return $resized;
}

$original = imagecreatefromjpeg('/var/www/uploads/foto.jpg');
if ($original === false) {
    throw new RuntimeException('Bild konnte nicht geladen werden.');
}

$thumb = resizeImage($original, 200, 150);

header('Content-Type: image/jpeg');
imagejpeg($thumb);

// Explizites Freigeben ist optional, da GdImage Garbage-Collection unterstützt
imagedestroy($original);
imagedestroy($thumb);

Typprüfung eines GdImage-Objekts

<?php
$img = imagecreatetruecolor(100, 100);

// Prüfen, ob es sich um ein GdImage handelt
if ($img instanceof GdImage) {
    echo 'Gültiges GdImage-Objekt erhalten.' . PHP_EOL;
}

// Farbe füllen und als PNG ausgeben
$blau = imagecolorallocate($img, 0, 102, 204);
imagefill($img, 0, 0, $blau);

ob_start();
imagepng($img);
$pngDaten = ob_get_clean();

echo 'PNG-Größe in Bytes: ' . strlen($pngDaten) . PHP_EOL;
Gültiges GdImage-Objekt erhalten. PNG-Größe in Bytes: [variiert je nach Kompression]

// Wichtig · Fallstricke

Rückwärtskompatibilität: In PHP 7.x liefern GD-Funktionen einen resource-Typ. Wird Code für PHP 7 und 8 gemeinsam gepflegt, darf der Typhinweis GdImage nicht verwendet werden, da die Klasse auf PHP 7 nicht existiert. Alternativ kann man \GdImage|resource im DocBlock notieren und zur Laufzeit mit is_object() prüfen.

imagedestroy(): Ab PHP 8.0.0 ist imagedestroy() technisch nicht mehr notwendig, da GdImage-Objekte der normalen PHP-Garbage-Collection unterliegen. In langläufigen Skripten oder Schleifen, die viele Bilder verarbeiten, empfiehlt es sich dennoch, Ressourcen explizit freizugeben, um den Speicherverbrauch zu kontrollieren. Ab PHP 8.0 gibt imagedestroy() nur noch true zurück, ohne das Objekt wirklich zu zerstören.

Opaker Typ: Da GdImage vollständig opak ist, können weder eigene Eigenschaften gelesen noch Methoden aufgerufen werden. Jede direkte Instanziierung via new GdImage() führt zu einem Fehler.