ImageColorallocatealpha () ist eine sehr häufige Funktion bei der Verwendung der GD -Bibliothek von PHP für die Bildverarbeitung. Sein Ziel ist es, einem Bild eine Farbe mit Transparenz zuzuweisen. Die Funktionsdefinition lautet wie folgt:
int imagecolorallocatealpha ( resource $image , int $red , int $green , int $blue , int $alpha )
Es empfängt fünf Parameter:
$ bild : Eine Bildressource, die von Imagecreate () oder ImageCrreatTueColor () erstellt wurde.
$ rot : roter Zutat (0–255).
$ Green : Green Inhaltsstoffe (0–255).
$ Blue : Blue Inhaltsstoffe (0–255).
$ alpha : Transparenz (0–127, wobei 0 vollständig undurchsichtig und 127 vollständig transparent bedeutet).
Dann lautet die Frage: Was passiert, wenn der Farbwert, den wir übergeben (z. B. $ rot , $ green , $ blau ), 255 überschreitet?
Die Farbparameter der Funktion "ImageColorAllocatealpha ()) sind basierend auf 8-Bit .
Wenn Sie beispielsweise einen Wert von mehr als 255 geben:
$red = 300;
$green = 500;
$blue = 1000;
$alpha = 50;
$image = imagecreatetruecolor(200, 200);
$color = imagecolorallocatealpha($image, $red, $green, $blue, $alpha);
Diese Außenwerte können abgeschnitten, überflutet oder in bestimmten Umgebungen direkt gewarnt oder Fehler verärgert werden. Das liegt daran, dass:
Die zugrunde liegende C -Implementierung dauert nur die unteren 8 Bits: 300 beträgt tatsächlich 300 % 256 = 44 .
Das Überschreiten des Bereichs kann den Code unvorhersehbar verhalten, und die Ergebnisse können sich in verschiedenen PHP -Versionen oder Kompilierungsmethoden unterscheiden.
Die Ausnahmen stammen hauptsächlich aus:
Speicherschreibfehler : Wenn keine Umfangsprüfung intern durchgeführt wird, wird der Wert direkt an die zugrunde liegende Speicherzuweisung übergeben, die die Datenstruktur beschädigen kann.
Interner Schutzmechanismus der GD -Bibliothek : Einige GD -Bibliotheksversionen überprüfen den Parameterbereich, und wenn ein Ausreißer gefunden wird, wird ein Fehler geworfen oder falsch wird zurückgegeben.
PHP -Fehler oder Warnungen : Insbesondere wenn die strenge Fehlerprüfung aktiviert ist, kann der Bereichswert direkt zu E_WARNING oder E_NOTICE führen.
Beispiel:
$img = imagecreatetruecolor(100, 100);
$invalid_color = imagecolorallocatealpha($img, 999, 999, 999, 999);
if ($invalid_color === false) {
echo "Die Farbzuweisung fehlgeschlagen,Bitte überprüfen Sie den Eingangswert。";
}
In diesem Code wird das System wahrscheinlich falsch zurückkehren und nachfolgende Zeichnungen scheitern.
Best Practices :
Begrenzen Sie den Umfang manuell, bevor Sie anrufen:
function clamp($value, $min, $max) {
return max($min, min($max, $value));
}
$red = clamp($inputRed, 0, 255);
$green = clamp($inputGreen, 0, 255);
$blue = clamp($inputBlue, 0, 255);
$alpha = clamp($inputAlpha, 0, 127);
Gehen Sie niemals davon aus, dass die Benutzereingabe sicher ist. Wenn es sich um einen vom Benutzer eingegebenen Farbwert handelt, muss er streng überprüft werden.
Der Farbwert von ImageColorallocatealpha () kann außerhalb der Reichweite eine Ausnahme verursachen, da er auf der Gestaltung der zugrunde liegenden 8-Bit-Ganzzahl- und GD-Bibliothek basiert. Um die Programmstabilität zu gewährleisten, müssen alle Farbparameter vor dem Anruf überprüft werden, um einen versehentlichen Überlauf oder Fehler zu vermeiden.