Start · Sprachen · PHP · Referenz · imagecolordeallocate

imagecolordeallocate

Funktion

Gibt eine zuvor mit <code>imagecolorallocate()</code> oder <code>imagecolorallocatealpha()</code> reservierte Farbe aus der Farbtabelle eines GD-Bildes frei.

seit PHP 4.0.0 Kategorie: image

Signatur

imagecolordeallocate(GdImage $image, int $color): bool

Beschreibung

imagecolordeallocate() entfernt eine Farbe aus der internen Farbtabelle eines GD-Bildes. Farben werden durch einen Integer-Index identifiziert, der beim Aufruf von imagecolorallocate() oder imagecolorallocatealpha() zurückgegeben wird.

Bei Bildern im True-Color-Modus (z. B. JPEG oder PNG, die mit imagecreatetruecolor() erzeugt wurden) hat diese Funktion keine praktische Wirkung, da kein Paletten-Index verwaltet wird. Relevant ist sie vor allem bei Paletten-Bildern (Modus-8, GIF), bei denen die Farbpalette auf maximal 256 Einträge begrenzt ist.

Wenn eine Palette voll ist, schlägt imagecolorallocate() fehl und gibt false zurück. Mit imagecolordeallocate() können dann nicht mehr benötigte Farben freigegeben werden, um Platz für neue zu schaffen. Verwende diese Funktion daher bevorzugt bei GIF-Erzeugung oder Bildmanipulationen mit vielen dynamischen Farbzuweisungen.

Nach dem Aufruf sollte der freigegebene Farbindex nicht mehr verwendet werden, da das Ergebnis undefiniert ist.

Parameter

Name Typ Default Beschreibung
$image Pflicht GdImage Das GD-Bildobjekt, das mit einer Bild-Erzeugungsfunktion wie imagecreate() oder imagecreatetruecolor() erstellt wurde.
$color Pflicht int Der Farbindex, der von imagecolorallocate() oder imagecolorallocatealpha() zurückgegeben wurde und freigegeben werden soll.

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, false bei einem Fehler (z. B. wenn der Index ungültig ist).

Beispiele

Farbe reservieren und wieder freigeben

<?php
// Paletten-Bild erstellen (max. 256 Farben)
$bild = imagecreate(200, 200);

// Hintergrundfarbe (erster Aufruf legt den Hintergrund fest)
$weiss = imagecolorallocate($bild, 255, 255, 255);

// Weitere Farbe reservieren
$rot = imagecolorallocate($bild, 255, 0, 0);

// Rechteck in Rot zeichnen
imagerectangle($bild, 20, 20, 180, 180, $rot);

// Rot wird nicht mehr benötigt — freigeben
$erfolg = imagecolordeallocate($bild, $rot);
echo $erfolg ? 'Farbe freigegeben.' : 'Freigabe fehlgeschlagen.';

imagepng($bild, 'ausgabe.png');
imagedestroy($bild);
Farbe freigegeben.

Paletten-Limit umgehen durch Freigabe nicht benötigter Farben

<?php
// Kleines Paletten-Bild (max. 256 Farben)
$bild = imagecreate(100, 100);

// Hintergrund
$hintergrund = imagecolorallocate($bild, 255, 255, 255);

// Temporäre Farbe reservieren
$temp = imagecolorallocate($bild, 0, 128, 0);

if ($temp === false) {
    echo 'Keine freien Farbslots mehr!';
} else {
    // Temporäre Farbe verwenden ...
    imagesetpixel($bild, 50, 50, $temp);

    // Temporäre Farbe freigeben, um Slot für neue Farbe zu schaffen
    imagecolordeallocate($bild, $temp);

    // Neuen Slot mit anderer Farbe belegen
    $blau = imagecolorallocate($bild, 0, 0, 255);
    imagesetpixel($bild, 60, 60, $blau);

    echo 'Farb-Slot erfolgreich wiederverwendet.';
}

imagedestroy($bild);
Farb-Slot erfolgreich wiederverwendet.

// Wichtig · Fallstricke

True-Color-Bilder: Bei mit imagecreatetruecolor() erzeugten Bildern hat imagecolordeallocate() keine Wirkung, da diese Bilder keine Paletten-Tabelle verwenden. Die Funktion gibt in diesem Fall dennoch true zurück.

Verwendung nach Freigabe: Ein freigegebener Farbindex sollte nicht weiterverwendet werden. Das Verhalten ist in diesem Fall undefiniert und kann zu unerwarteten Darstellungsfehlern führen.

Bildspeicher: imagecolordeallocate() gibt keinen Bildspeicher (RAM) frei — dafür ist imagedestroy() zuständig.