Signatur
Beschreibung
imagecolorstotal() ermittelt die Anzahl der aktuell verwendeten Farben in der Farbpalette eines GD-Bildes. Die Funktion ist vor allem für palettenbasierte Bilder (z. B. GIF oder mit imagecreate() erzeugte PNG-8-Bilder) relevant, da diese auf eine begrenzte Palette von maximal 256 Farben beschränkt sind.
Bei Truecolor-Bildern, die mit imagecreatetruecolor() erstellt wurden, gibt die Funktion stets 0 zurück, da Truecolor-Bilder keine diskrete Farbpalette verwenden, sondern jeden Pixel mit einem 24-Bit-Farbwert kodieren.
Typische Anwendungsfälle sind die Analyse von Bilddateien (z. B. um festzustellen, ob ein GIF seine Palettengröße ausschöpft) oder das Prüfen, bevor weitere Farben mit imagecolorallocate() hinzugefügt werden – denn nach Erreichen des Limits von 256 Farben schlägt die Zuweisung neuer Farben fehl.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $image Pflicht | GdImage | Ein gültiges GD-Bildobjekt, das z. B. von imagecreate(), imagecreatefromgif() oder einer ähnlichen Funktion zurückgegeben wurde. |
Rückgabewert
0 zurückgegeben.Beispiele
Farben in einem palettenbasierten Bild zählen
<?php
// Palettenbasiertes Bild mit imagecreate() erstellen (max. 256 Farben)
$image = imagecreate(200, 200);
// Einige Farben zur Palette hinzufügen
$weiss = imagecolorallocate($image, 255, 255, 255);
$rot = imagecolorallocate($image, 255, 0, 0);
$blau = imagecolorallocate($image, 0, 0, 255);
$anzahl = imagecolorstotal($image);
echo "Anzahl der Farben in der Palette: " . $anzahl . PHP_EOL;
imagedestroy($image);
Vergleich: Palettenbild vs. Truecolor-Bild
<?php
// Palettenbasiertes Bild
$palettenbild = imagecreate(100, 100);
imagecolorallocate($palettenbild, 0, 0, 0);
imagecolorallocate($palettenbild, 128, 128, 128);
echo "Palettenbild – Farben: " . imagecolorstotal($palettenbild) . PHP_EOL;
// Truecolor-Bild
$truecolor = imagecreatetruecolor(100, 100);
echo "Truecolor-Bild – Farben: " . imagecolorstotal($truecolor) . PHP_EOL;
imagedestroy($palettenbild);
imagedestroy($truecolor);
Prüfen, ob die Palettengrenze erreicht ist
<?php
$image = imagecreatefromgif('beispiel.gif');
$anzahl = imagecolorstotal($image);
if ($anzahl >= 256) {
echo "Palette ist voll – keine weiteren Farben können hinzugefügt werden." . PHP_EOL;
} else {
echo "Noch " . (256 - $anzahl) . " Palettenplätze frei." . PHP_EOL;
}
imagedestroy($image);
// Wichtig · Fallstricke
Bei Truecolor-Bildern liefert imagecolorstotal() immer 0, da diese keine Farbpalette besitzen. Möchte man ein Truecolor-Bild in ein Palettenbild umwandeln, kann imagetruecolortopalette() verwendet werden, wonach imagecolorstotal() wieder einen sinnvollen Wert zurückgibt.
Ab PHP 8.0.0 erwartet die Funktion ein GdImage-Objekt statt einer Ressource. Älterer Code, der noch eine Ressource übergibt, muss entsprechend angepasst werden.