Bei der Verwendung von PHP für die Bildverarbeitung wird die Funktion "Imagesantialias ()) häufig verwendet, um die Glätte von Bildkanten zu verbessern und damit den Jagging -Effekt zu verringern. Viele Entwickler haben jedoch in praktischen Anwendungen festgestellt, dass die Funktion nicht wie erwartet wirksam wird, und das Bild hat immer noch offensichtliche gezackte Kanten. Was ist der Grund, warum es sich um eine ungültige Imagesantialias () handelt? Wie kann man korrekt Anti-Aliasing erreichen? Dieser Artikel wird eine eingehende Analyse dieses Problems durchführen und praktikable Lösungen vorschlagen.
Imagesantialias (Ressource $ Image, bool $ aktiviert): Bool ist eine Funktion der GD-Bibliothek, um die Anti-Aliasing von Bildern zu aktivieren oder zu deaktivieren. Diese Funktion wirkt sich hauptsächlich beim Zeichnen von Linien und Kreisen und anderen grafischen Elementen aus. Es ist für die "Zeichnen" -Dufe des Bildes geeignet und nicht für Bildskalierung oder Umwandlung.
Schlüsselpunkte:
Nur gültig für das Zeichnen von Grafiken (wie z. B. Imagine () und ImageArc () );
Ungültig für Bildskalierung (wie z. B. BilderCale () , ImageCopyreSampled () );
Die Funktion wirkt sich nur auf nachfolgende Zeichnungsfunktionen aus, nachdem sie eingeschaltet wurde.
Die Anti-Aliasing-Funktion ist nicht aktiviert <br> Viele Entwickler glauben fälschlicherweise, dass das Aufrufen von Imagesantialias () nur einmal auf alle grafischen Operationen wirken kann, aber nur dann wirksam wird, wenn Sie vor dem Zeichnen True nennen:
$img = imagecreatetruecolor(200, 200);
imageantialias($img, true); // Muss vor dem Zeichnen platziert werden
imageline($img, 0, 0, 200, 200, $black);
Verwenden Sie Bitmap -Operationen, keine Vektorzeichnungen <br> Wenn Sie nur Kopieren, Skalierung und andere Operationen auf dem Bild ausführen, erzeugt sich Imagesantialias () anstatt Funktionen wie ImageLine () zu erzeugen. Zum Beispiel:
// Anti-Aliasing wird bei der Skalierung eines vorhandenen Bildes nicht ausgelöst
imagecopyresized($dst, $src, 0, 0, 0, 0, 100, 100, 200, 200);
Alternative: Verwenden Sie imageCopyresampled () , um zu skalieren, was besser ist.
GD Library Version Ausgabe <br> In einigen älteren PHP- oder GD -Bibliotheksversionen wird die Funktion der Bildung () () schlecht implementiert, und es gibt sogar Fehler ohne Auswirkungen nach dem Anruf. Es wird empfohlen, PHP Version 7.4 oder höher zu verwenden und sicherzustellen, dass GD FreeType unterstützt.
Falscher Bildmodus <br> Anti-Aliasing-Effekte sind besser für Bilder geeignet, die mit Imagecreatetruecolor () erstellt wurden () als mit minderwertigen Bildern, die mit Imagecrate () erzeugt wurden. Bilder mit geringer Qualität unterstützen keine volle Farbtiefe und beeinflussen die Anti-Aliasing-Leistung.
// Empfohlene Verwendung true color Bild
$img = imagecreatetruecolor(300, 300);
$img = imagecreatetruecolor(200, 200);
$black = imagecolorallocate($img, 0, 0, 0);
imageantialias($img, true); // Anti-Aliasing einschalten
imageline($img, 10, 10, 190, 190, $black);
imagepng($img, 'https://m66.net/output/line.png');
imagedestroy($img);
$src = imagecreatefrompng('https://m66.net/input/image.png');
$dst = imagecreatetruecolor(100, 100);
imagecopyresampled($dst, $src, 0, 0, 0, 0, 100, 100, imagesx($src), imagesy($src));
imagepng($dst, 'https://m66.net/output/resampled.png');
imagedestroy($src);
imagedestroy($dst);
Die Anti-Aliasing-Fähigkeiten der GD-Bibliothek sind schließlich begrenzt. Wenn Sie eine Bildverarbeitung von höherer Qualität benötigen, können Sie die folgenden Alternativen berücksichtigen:
Imagick (PHP-Erweiterung von Imagemagick) : Unterstützt reichere Bildverarbeitungsfunktionen und Anti-Aliasing-Algorithmen mit höherer Qualität;
Kairo : Eine 2D-Grafikbibliothek, die qualitativ hochwertige Zeichnung unterstützt;
Dienste von Drittanbietern : Beispielsweise werden die Bildgenerierung und die Anti-Aliasing-Optimierung unter Verwendung der Bildverarbeitungs-API durchgeführt.
Imagesantialias () kann tatsächlich das zackige Problem von Bildern verbessern, jedoch nur, wenn es für seine anwendbaren Szenarien und die Aufrufauftrag korrekt verwendet wird. Wenn Sie feststellen, dass es nicht funktioniert, liegt es häufig daran, dass Sie die Bildfunktion missbraucht, den GD -Bildtyp ignoriert haben oder Missverständnisse über seine Funktion haben. Es wird empfohlen, imageCopyresampled () zu kombinieren, echte Farbbilder zu verwenden und die GD -Bibliothek für die besten Ergebnisse zu aktualisieren. Für Entwicklungsprojekte, die eine höhere Bildqualität verfolgen, können Sie auch in Betracht ziehen, professionelle Image -Verarbeitungstools einzuführen.