Signatur
Beschreibung
imagegammacorrect() rechnet alle Pixelwerte eines GD-Bildes von einem angegebenen Eingabe-Gamma-Wert in einen angegebenen Ausgabe-Gamma-Wert um. Dies ist nützlich, wenn Bilder zwischen verschiedenen Anzeigeumgebungen oder Farbräumen korrekt dargestellt werden sollen, da unterschiedliche Monitore und Ausgabegeräte unterschiedliche Gamma-Charakteristiken besitzen.
Die Gamma-Korrektur basiert auf einer Potenzfunktion: Jeder Farbkanal-Wert (Rot, Grün, Blau) wird normalisiert (0–1), mit dem Verhältnis input_gamma / output_gamma potenziert und anschließend wieder auf den 0–255-Bereich skaliert. Ein typischer Monitorwert für Gamma liegt bei 2,2, während lineares Licht einem Gamma von 1,0 entspricht.
Die Funktion eignet sich besonders für die Bildvorverarbeitung, etwa wenn Bilder aus einer Kamera (die oft ein Gamma von 2,2 besitzen) in den linearen Farbraum für Berechnungen umgewandelt werden sollen und anschließend wieder zurück. Sie arbeitet direkt auf dem Bildobjekt und verändert es dauerhaft.
Hinweis: Die Funktion arbeitet kanalweise auf dem RGB-Bild und berücksichtigt keinen Alpha-Kanal. Bei Bildern mit Transparenz sollte daher mit Vorsicht vorgegangen werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $image Pflicht | GdImage | Ein GD-Bildobjekt, das z. B. durch imagecreatetruecolor(), imagecreatefromjpeg() oder ähnliche Funktionen erzeugt wurde. |
|
| $input_gamma Pflicht | float | Der Gamma-Wert des Quellbildes. Ein typischer Wert für Standard-Monitore und JPEGs beträgt 2.0 oder 2.2. Lineares Licht entspricht 1.0. |
|
| $output_gamma Pflicht | float | Der gewünschte Gamma-Zielwert nach der Korrektur. Für die Konvertierung in lineares Licht wird 1.0 verwendet; für eine Standard-Monitordarstellung 2.2. |
Rückgabewert
true bei Erfolg zurück, false bei einem Fehler (z. B. ungültiges Bildobjekt).Beispiele
Bild von sRGB-Gamma (2.2) in linearen Farbraum (1.0) umwandeln
<?php
// JPEG laden (typisches sRGB-Bild mit Gamma ≈ 2.2)
$image = imagecreatefromjpeg('foto.jpg');
if ($image === false) {
die('Bild konnte nicht geladen werden.');
}
// Von Gamma 2.2 in lineares Licht (Gamma 1.0) umwandeln
$erfolg = imagegammacorrect($image, 2.2, 1.0);
if ($erfolg) {
imagejpeg($image, 'foto_linear.jpg', 90);
echo 'Gamma-Korrektur erfolgreich angewendet.';
} else {
echo 'Fehler bei der Gamma-Korrektur.';
}
imagedestroy($image);
Hin- und Rückkonvertierung für Bildverarbeitung im linearen Farbraum
<?php
// Bild laden
$image = imagecreatefromjpeg('eingabe.jpg');
// Schritt 1: Von sRGB (Gamma 2.2) in lineare Helligkeit umwandeln
imagegammacorrect($image, 2.2, 1.0);
// Schritt 2: Bildverarbeitungsoperationen im linearen Farbraum durchführen
// (z. B. Helligkeit anpassen, Filter anwenden ...)
imagefilter($image, IMG_FILTER_BRIGHTNESS, 20);
// Schritt 3: Zurück in den sRGB-Farbraum (Gamma 2.2) konvertieren
imagegammacorrect($image, 1.0, 2.2);
// Ergebnis speichern
imagejpeg($image, 'ausgabe.jpg', 90);
imagedestroy($image);
echo 'Bildverarbeitung im linearen Farbraum abgeschlossen.';
// Wichtig · Fallstricke
Keine Alpha-Unterstützung: imagegammacorrect() verarbeitet ausschließlich die RGB-Farbkanäle. Der Alpha-Kanal bei PNG-Bildern mit Transparenz bleibt unverändert, was jedoch bei manchen Verarbeitungsszenarien zu unerwünschten Ergebnissen führen kann.
Irreversibilität: Die Funktion modifiziert das Bild direkt. Da bei jeder Gamma-Umwandlung durch die Integer-Quantisierung der Pixelwerte kleine Rundungsfehler entstehen, ist der Vorgang nicht verlustfrei umkehrbar. Für verlustfreie Verarbeitung empfiehlt es sich, das Originalbild vorher zu sichern.
Nur für Truecolor-Bilder empfohlen: Bei Paletten-Bildern (z. B. erzeugt mit imagecreate()) kann das Ergebnis unvorhersehbar sein, da die Farbpalette beschränkt ist. Im Zweifel zuvor mit imagepalettetotruecolor() konvertieren.