Start · Sprachen · PHP · Referenz · imagecolorstotal

imagecolorstotal

Funktion

Gibt die Anzahl der in der Palette eines palettenbasierten Bildes enthaltenen Farben zurück.

seit PHP 4.0.0 Kategorie: image

Signatur

imagecolorstotal(GdImage $image): int

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

Typ
int
Beschreibung
Gibt die Anzahl der Farben in der Palette des Bildes zurück. Bei Truecolor-Bildern wird immer 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);
Anzahl der Farben in der Palette: 3

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);
Palettenbild – Farben: 2 Truecolor-Bild – Farben: 0

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.