Bei der Verwendung von PHP für die Bildverarbeitung bietet die GD -Bibliothek eine Fülle von Funktionen, die Entwickler anrufen können. Imagesantialias () ist eine wichtige Funktion zur Verbesserung der Glätte von Bildkanten. In den tatsächlichen Projekten wird Imagesantialias () jedoch häufig nicht isoliert verwendet und häufig in Kombination mit anderen Bildfilterfunktionen (wie ImageFilter () ) verwendet. Beeinflusst die Reihenfolge des Funktionsaufrufs in diesem Fall also den Bildausgangseffekt? Die Antwort lautet ja.
In diesem Artikel wird untersucht, wie die Aufrufreihenfolge vernünftigerweise anordnen kann, um den besten Bildverarbeitungseffekt bei der Verwendung von Imagesantialias () mit anderen Filterfunktionen (z. B. ImageFilter () , Imagesmooth () , imageCopyresampled () usw.) zu erzielen.
Imagesantialias (Ressource $ Image, bool $ enable): bool
Diese Funktion wird verwendet, um die Anti-Aliasing-Funktion ein- oder auszuschalten, die hauptsächlich auf die Ausgabe von Linien, Bögen oder anderen Zeichenfunktionen wirkt, wodurch die Kanten des Bildes glatter sind.
$image = imagecreatetruecolor(300, 200);
imageantialias($image, true); // Anti-Aliasing einschalten
HINWEIS: Imagesantialias () gilt nur für bestimmte Zeichenfunktionen wie Imagine () , ImagePolygon () usw. und hat keinen direkten Einfluss auf die Bildskalierung oder Filterung von Bild.
ImageFilter () bietet eine Vielzahl von Filteroptionen wie Unschärfe, Kontrastanpassung, Schärfen, Graustufen usw., die normalerweise zum Verarbeiten von Bildern verwendet werden, die erzeugt wurden.
imagefilter($image, IMG_FILTER_GAUSSIAN_BLUR);
Dies ist der empfohlene Ansatz. Wenn Sie ein Diagramm zeichnen und Anti-Aliasing-Effekte verwenden müssen, sollten Sie zuerst Imagesantialias () aktivieren und dann die Zeichenfunktion aufrufen.
$image = imagecreatetruecolor(300, 200);
imageantialias($image, true);
imageline($image, 0, 0, 300, 200, imagecolorallocate($image, 255, 0, 0));
Diese Reihenfolge stellt sicher, dass die Linien glattere Kanten haben.
Die Filterfunktion wirkt auf den vorhandenen Bildinhalt. Daher sollte ImageFilter () nach Abschluss der Zeichnung aufgerufen werden, da es sonst einen unerwarteten Einfluss auf den Zwischenzeichnungsprozess haben kann.
// Richtige Reihenfolge
$image = imagecreatetruecolor(300, 200);
imageantialias($image, true);
imagerectangle($image, 50, 50, 250, 150, imagecolorallocate($image, 0, 255, 0));
imagefilter($image, IMG_FILTER_GAUSSIAN_BLUR);
Wenn die Filterfunktion vor dem Zeichnen aufgerufen wird, wird ein leeres Bild verarbeitet und der Filtereffekt kann nach dem Zeichnen nicht mehr überlagert werden.
ImageCopyReSampled () wird Bildpixelinformationen regenerieren, sodass seine Anrufreihenfolge ebenfalls von entscheidender Bedeutung ist. Normalerweise empfohlen:
Wenn Sie das vergrößerte Bild filtern möchten, sollten Sie zuerst skalieren und dann filtern.
Wenn Sie vor der Skalierung eine komplexe Zeichnung durchführen, sollten Sie nach dem Zeichnen und vor der Skalierung Bildendien () verwenden.
$src = imagecreatefromjpeg('https://m66.net/images/sample.jpg');
$dst = imagecreatetruecolor(100, 100);
imagecopyresampled($dst, $src, 0, 0, 0, 0, 100, 100, imagesx($src), imagesy($src));
imagefilter($dst, IMG_FILTER_CONTRAST, -10);
Hier finden Sie einen empfohlenen Bildverarbeitungsfluss:
$image = imagecreatetruecolor(300, 200);
// 1. Anti-Aliasing ermöglichen
imageantialias($image, true);
// 2. Zeichnung
imageline($image, 0, 0, 300, 200, imagecolorallocate($image, 0, 0, 255));
imageellipse($image, 150, 100, 200, 100, imagecolorallocate($image, 255, 0, 0));
// 3. Filter anwenden
imagefilter($image, IMG_FILTER_SMOOTH, 6);
// 4. Zoomen oder sparen
$thumb = imagecreatetruecolor(150, 100);
imagecopyresampled($thumb, $image, 0, 0, 0, 0, 150, 100, 300, 200);
imagejpeg($thumb, '/var/www/html/output.jpg');
ImageAntialias () muss vor der Zeichenfunktion aufgerufen werden;
ImageFilter () sollte nach Bildzeichnung verwendet werden;
ImageCopyReSampled () sollte verwendet werden, nachdem alle Verarbeitung beendet ist.
Die Reihenfolge der Aufruf zur Bildverarbeitung bestimmt direkt die Qualität der endgültigen Ausgabe.
Das Verständnis der Ausführungsreihenfolge von Bildverarbeitungsfunktionen und angemessener Planung von Aufrufen kann die Qualität und Leistung der PHP -Bildverarbeitung effektiv verbessern. Für komplexe Bildoperationen können Sie auch in Betracht ziehen, Textzeichnungsfunktionen wie ImagettFtext () zu kombinieren, um vielfältigere Effekte zu erzielen.
Wenn Sie in Ihrer Bereitstellungsumgebung auf eine schlechte Bildverarbeitungsqualität stoßen, können Sie Ihre Funktionsanrufauftrag genauso gut überdenken und nach Anpassungen häufig unerwartete Verbesserungen erzielen.