Bei der Verwendung der GD -Bildverarbeitungsbibliothek von PHP wird die Funktion "ImageAntialias () häufig zum Glätten von Bildkanten verwendet, insbesondere die Zeichnung von Zeilen, Text und Grafiken. Viele Entwickler werden jedoch feststellen, dass Bildantialias () bei der Verarbeitung von PNG-Format-Bildern keinen offensichtlichen Effekt erzeugt. Warum passiert das? In diesem Artikel werden Sie die Gründe dafür aufnehmen.
Die fileantialias () -Funktion wird verwendet, um Bild -Antialiasing -Bild zu aktivieren oder zu deaktivieren. Die grundlegende Syntax ist wie folgt:
imageantialias($image, true);
Wenn die GD-Bibliothek auf True gesetzt ist, versucht sie, Anti-Aliasing-Algorithmen zu verwenden, um die Kanten der Grafiken beim Zeichnen von Bildern zu glätten und so den visuellen Effekt zu verbessern. Es ist jedoch zu beachten, dass sich dieser Anti-Aliasing-Effekt hauptsächlich in der Zeichnungsoperation widerspiegelt, nicht im Bild selbst.
Das heißt, es wirkt sich nur auf Elemente aus, die durch GD (wie z. B. Imagine () , ImagePolygon () usw.) gezogen wurden, und hat keinen direkten Einfluss auf den geladenen Bildinhalt.
ImageAntialias () gilt nur für Bildressourcen, die mit ImagecrreatTruecolor () erstellt wurden. Wenn das mit ImageCreate () erstellte Palettenbild eine palettenbasierte Basis ist, wird die Anti-Aliasing-Funktion nicht wirksam. PNG -Bilder werden normalerweise im tatsächlichen Farbformat gespeichert, wenn sie jedoch durch ImagecreateFrommpng () geladen werden, kann es in Palettenform geladen werden (abhängig vom Farbmodus des Bildes selbst).
Die Lösung lautet wie folgt:
$image = imagecreatefrompng("https://m66.net/images/sample.png");
$trueColor = imagecreatetruecolor(imagesx($image), imagesy($image));
imagecopy($trueColor, $image, 0, 0, 0, 0, imagesx($image), imagesy($image));
imageantialias($trueColor, true);
Dies ist ein wichtiger Punkt, den viele Entwickler ignorieren: ImageAntialias () hat keinen Einfluss auf die "bereits Pixel" von Bildressourcen. Das heißt, wenn Sie ein vorhandenes PNG-Bild laden, wird das Aufrufen von Imagesantialias () das Bild nicht nachbearbeiten. Dies ist kein "Bildfilter", sondern ein Zeichnungsoptimierungsschalter.
Wenn Sie das gesamte PNG -Bild verwischen oder glätten möchten, müssen Sie eine Funktion wie ImageFilter () verwenden. Beispiel:
$image = imagecreatefrompng("https://m66.net/images/sample.png");
imagefilter($image, IMG_FILTER_SMOOTH, 10);
PNG unterstützt Alpha -Kanäle (Transparenz), und ImageAntialias () wird die Mischung von transparenten Pixelkanten nicht direkt verarbeitet. Wenn Sie Inhalte auf transparenten Bildern zeichnen, kann es immer noch ein "gezackt" an den Rändern geben. Zu diesem Zeitpunkt können Sie durchscheinende Farben zum Zeichnen verwenden und dann die Schichtmischung kombinieren, um bessere Kantenübergänge zu erzielen.
Beispiel:
$color = imagecolorallocatealpha($image, 255, 0, 0, 50); // Durchscheinend rot
imagefilledellipse($image, 100, 100, 50, 50, $color);
Verwenden Sie immer Truecolor -Bildressourcen.
Aktivieren Sie Anti-Aliasing nur für Zeichnungsoperationen.
Erwarten Sie nicht, dass es auf vorhandenen Bildern funktioniert.
Kombiniert mit ImageFilter (), um eine fortgeschrittenere Bildoptimierung zu erreichen.
Wenn Sie jemals festgestellt haben, dass Imagesantialias () bei der Arbeit mit PNG -Bildern keine Wirkung hat, ist dies höchstwahrscheinlich, weil Sie missverstanden sind, wofür es ist. Es ist kein Filter für die Bildschärfe oder -glättung, sondern ein Schalter, der nur "grafische Zeichnung" betrifft. Nachdem Sie verstanden haben, wie es funktioniert, können Sie andere GD -Funktionen kombinieren, um den gewünschten Bildoptimierungseffekt zu erzielen.