Bei der Erstellung von CAPTCHA -Verifizierungscode ist es eine wichtige technische Schwierigkeit, sicherzustellen, dass der Verifizierungscode nicht nur verhindern kann, dass die Maschine ihn automatisch identifiziert, sondern es auch den Benutzern ermöglicht, ihn einfach zu identifizieren. PHP liefert eine reichhaltige Bildverarbeitungsfunktion, bei der Bildantialias () den Anti-Aliasing-Effekt von Bildern effektiv verbessern und damit die Kanten von Text oder Grafiken im Verifizierungscode glatter machen und die Lesbarkeit verbessern können.
In diesem Artikel wird die GD -Bibliothek von PHP kombiniert, um zu demonstrieren, wie die Funktion "ImageAntialias () verwendet wird, um den visuellen Effekt des Verifizierungscodes beim Generieren des Captcha -Verifizierungscodes zu verbessern.
Imagesantialias () ist eine Funktion in der PHP-GD-Bibliothek, um die Anti-Aliasing-Wirkung von Bildern ein- oder auszuschalten. Jagging liegt daran, dass die Ränder des Bildes nicht geflecht stufene Pixelgrenzen. Durch Anti-Aliasing werden die Kanten durch Glätten der Kantenpixel glatter aussehen.
Der Funktionsprototyp lautet wie folgt:
bool imageantialias ( resource $image , bool $enable )
$ Bild : Bildressourcenhandle
$ enable : Ein- oder aus dem Anti-Aliasing-Effekt ein- oder ausschalten, wahr ist eingeschaltet, falsch ist ausgeschaltet
Erstellen wir zunächst ein grundlegendes Bild -Verifizierungscode -Bild:
<?php
// Erstellen Sie ein Bild 150x50 Leeres Bild
$image = imagecreatetruecolor(150, 50);
// Farben zuweisen
$white = imagecolorallocate($image, 255, 255, 255);
$black = imagecolorallocate($image, 0, 0, 0);
// Gefüllter Hintergrund mit Weiß
imagefilledrectangle($image, 0, 0, 150, 50, $white);
Wenn die Antialiasing aktiviert ist, sind die gezogenen Zeilen und Textkanten glatter:
// Anti-Aliasing einschalten
imageantialias($image, true);
Fügen Sie dem Verifizierungscode Interferenzleitungen hinzu, um eine einfache OCR -Erkennung zu verhindern:
for ($i = 0; $i < 5; $i++) {
$line_color = imagecolorallocate($image, rand(100, 150), rand(100, 150), rand(100, 150));
imageline($image, rand(0, 150), rand(0, 50), rand(0, 150), rand(0, 50), $line_color);
}
Hier verwenden wir die Funktion von ImagettFtext () , um Text zu zeichnen und Anti-Aliasing zu vermitteln, um den Text klarer zu machen:
$font = __DIR__ . '/fonts/arial.ttf'; // Bitte stellen Sie sicher, dass der Schriftart korrekt ist
$code = substr(str_shuffle('ABCDEFGHJKLMNPQRSTUVWXYZ23456789'), 0, 5);
for ($i = 0; $i < strlen($code); $i++) {
$text_color = imagecolorallocate($image, rand(0, 100), rand(0, 100), rand(0, 100));
imagettftext(
$image,
20,
rand(-15, 15),
20 + $i * 25,
rand(30, 40),
$text_color,
$font,
$code[$i]
);
}
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
?>
Imagesantialias () funktioniert nur an gezogenen Linien und Formen, und ImagettFtext (), die mit Anti-Aliasing-Effekten gerendert werden, sind bereits eingebaut.
Das Einschalten von Antialiasing kann die CPU -Belastung geringfügig erhöhen, aber die verbesserte Bildqualität ist normalerweise wert.
Stellen Sie sicher, dass die Schriftart vorliegt und der Pfad korrekt ist, andernfalls wird der Text nicht normal angezeigt.
<?php
// Erstellen Sie ein Bild
$image = imagecreatetruecolor(150, 50);
$white = imagecolorallocate($image, 255, 255, 255);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 0, 0, 150, 50, $white);
// Anti-Aliasing ermöglichen
imageantialias($image, true);
// Störungslinien zeichnen
for ($i = 0; $i < 5; $i++) {
$line_color = imagecolorallocate($image, rand(100, 150), rand(100, 150), rand(100, 150));
imageline($image, rand(0, 150), rand(0, 50), rand(0, 150), rand(0, 50), $line_color);
}
// Überprüfungscode Text
$font = __DIR__ . '/fonts/arial.ttf';
$code = substr(str_shuffle('ABCDEFGHJKLMNPQRSTUVWXYZ23456789'), 0, 5);
for ($i = 0; $i < strlen($code); $i++) {
$text_color = imagecolorallocate($image, rand(0, 100), rand(0, 100), rand(0, 100));
imagettftext($image, 20, rand(-15, 15), 20 + $i * 25, rand(30, 40), $text_color, $font, $code[$i]);
}
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
?>
Im obigen Beispiel können Sie die reibungslose Verbesserung von Imagesantialias () an den Rändern der Linie im Bild deutlich sehen, wodurch die allgemeine Lesbarkeit des Captcha -Verifizierungscodes verbessert wird. Das Kombinieren von Interferenzleitungen und des deformierten Textes kann die Sicherheits- und Benutzererfahrung von Überprüfungscodes effektiv verbessern.
Wenn Sie auf relevante Ressourcen oder APIs zugreifen müssen, beachten Sie bitte, dass Sie den Namen der URL -Domänen durch m66.net ersetzen, z. B.: