Die Anti-Aliasing-Funktionsdesign der GD-Bibliothek ist relativ einfach und unterstützt nur ein und aus. Die zugrunde liegende Implementierung wird von der GD-Bibliothek selbst gesteuert und es gibt keine feinkörnige Einstellungsschnittstelle. Daher können Sie den Grad der Anti-Aliasing nicht direkt durch Imagesantialias () anpassen.
Zeichnen Sie mit höherer Auflösung und zoomen Sie aus
Dies ist die häufig verwendete "SuperAmpling Anti-Aliasing" -Voridee. Sie können das Bild zuerst in einer größeren Größe zeichnen, Anti-Aliasing einschalten und dann durch ImageCopyresampled () auf die Zielgröße schrumpfen, was das Zackproblem erheblich verbessern kann.
<?php
$width = 200;
$height = 200;
// Erstellen Sie eine doppelgroße Leinwand
$largeWidth = $width * 2;
$largeHeight = $height * 2;
$largeImage = imagecreatetruecolor($largeWidth, $largeHeight);
imageantialias($largeImage, true);
$white = imagecolorallocate($largeImage, 255, 255, 255);
$black = imagecolorallocate($largeImage, 0, 0, 0);
imagefilledrectangle($largeImage, 0, 0, $largeWidth, $largeHeight, $white);
// Zeichnen von Linien oder Figuren,Koordinaten zweimal vergrößern
imageline($largeImage, 10 * 2, 10 * 2, 190 * 2, 190 * 2, $black);
// Erstellen Sie eine Ziel -Leinwand
$finalImage = imagecreatetruecolor($width, $height);
imagecopyresampled($finalImage, $largeImage, 0, 0, 0, 0, $width, $height, $largeWidth, $largeHeight);
header('Content-Type: image/png');
imagepng($finalImage);
imagedestroy($largeImage);
imagedestroy($finalImage);
?>
Verwenden Sie Imagick, um GD zu ersetzen
Wenn Sie höhere Anforderungen an Anti-Aliasing haben, wird empfohlen, Imagemagicks PHP-Erweiterungs -Imagick zu verwenden. Es unterstützt mehr Anti-Aliasing-Kontrollen, z. B. das Festlegen von Filtern und Stichprobenmethoden, die bessere Ergebnisse und reichhaltigere Parameter aufweisen.
Beispiel:
<?php
$imagick = new Imagick();
$imagick->newImage(200, 200, new ImagickPixel('white'));
$draw = new ImagickDraw();
$draw->setStrokeColor('black');
$draw->setStrokeWidth(2);
$draw->setFillColor('none');
$draw->setStrokeAntialias(true);
$draw->line(10, 10, 190, 190);
$imagick->drawImage($draw);
header("Content-Type: image/png");
echo $imagick;
?>
Manuell Anti-Aliasing-Algorithmus implementieren
Dies erfordert ein starkes Kenntnis der Bildverarbeitung und wird im Allgemeinen nicht empfohlen, es sei denn, es gibt spezielle Anforderungen an Anti-Aliasing-Effekte.
$image = imagecreatefrompng('https://m66.net/path/to/image.png');