Signatur
Beschreibung
imagedestroy() gibt den mit einem GD-Bildobjekt verbundenen Speicher frei. Sie sollte immer dann aufgerufen werden, wenn ein Bild nicht mehr benötigt wird, um Speicherlecks zu vermeiden – insbesondere in Skripten, die viele Bilder erzeugen oder verarbeiten (z. B. Batch-Konvertierungen oder Thumbnail-Generatoren).
Seit PHP 8.0 wird die frühere resource-Schnittstelle durch das typsichere GdImage-Objekt ersetzt. Das Objekt wird nach dem Aufruf ungültig; weiterer Zugriff darauf führt zu einem Fehler. In modernem PHP kann alternativ auch einfach unset() oder das Ende des Gültigkeitsbereichs genutzt werden, da GdImage-Objekte garbage-collected werden – imagedestroy() bleibt aber weiterhin als explizite und lesbare Methode empfohlen.
Typische Anwendungsfälle sind: Freigabe von Zwischenbildern in Bildbearbeitungs-Pipelines, sorgfältiges Ressourcenmanagement in lang laufenden PHP-Prozessen (z. B. unter PHP-FPM) sowie sauberes Aufräumen nach dem Senden eines Bildes an den Browser.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $image Pflicht | GdImage | Das zu zerstörende GdImage-Objekt, das zuvor von Funktionen wie imagecreate(), imagecreatefromjpeg() o. ä. zurückgegeben wurde. |
Rückgabewert
true bei Erfolg zurück, false bei einem Fehler (z. B. wenn das übergebene Objekt bereits ungültig ist).Beispiele
JPEG-Datei laden, skalieren und Ressource freigeben
<?php
// Originalbild laden
$original = imagecreatefromjpeg('foto.jpg');
// Thumbnail erstellen (200x150 Pixel)
$thumb = imagecreatetruecolor(200, 150);
imagecopyresampled($thumb, $original, 0, 0, 0, 0, 200, 150, imagesx($original), imagesy($original));
// Thumbnail speichern
imagejpeg($thumb, 'thumbnail.jpg', 85);
// Ressourcen freigeben
imagedestroy($original);
imagedestroy($thumb);
echo "Thumbnail wurde erstellt und Speicher freigegeben.\n";
Dynamisches Bild an den Browser senden und dann zerstören
<?php
// Einfaches PNG-Bild erzeugen
$image = imagecreatetruecolor(300, 100);
$bg = imagecolorallocate($image, 30, 144, 255);
$text = imagecolorallocate($image, 255, 255, 255);
imagefilledrectangle($image, 0, 0, 299, 99, $bg);
imagestring($image, 5, 80, 40, 'programmierung.net', $text);
// HTTP-Header setzen und Bild ausgeben
header('Content-Type: image/png');
imagepng($image);
// Speicher explizit freigeben
imagedestroy($image);
// Wichtig · Fallstricke
Speicherverwaltung: Große Bilder (z. B. hochauflösende Fotos) können erheblichen RAM beanspruchen. Ohne imagedestroy() bleibt dieser Speicher bis zum Ende des Skripts belegt, was bei Batch-Verarbeitung vieler Bilder zu Speichermangel (Allowed memory size exhausted) führen kann.
PHP 8.0+: Da GdImage-Objekte dem normalen PHP-Garbage-Collector unterliegen, wird das Objekt auch automatisch zerstört, wenn keine Referenzen mehr darauf existieren. imagedestroy() kann jedoch sinnvoll sein, um den Zeitpunkt der Freigabe explizit zu steuern – etwa mitten in einer Schleife.
Deprecation-Hinweis: Vor PHP 8.0 wurde eine resource übergeben; die Funktion funktioniert seit 8.0 ausschließlich mit GdImage-Objekten.