Während der Bildverarbeitung von PHP wird die Funktion der Bildungstialias () verwendet, um Anti-Aliasing-Effekte zu aktivieren oder zu deaktivieren, wodurch die Glätte von Linien oder Grafiken im Bild verbessert wird. Diese Funktion wird hauptsächlich beim Zeichnen von Linien, Bögen, Rechtecken und anderen Figuren verwendet. Durch das Verschwinden der Kanten sieht das Bild glatter und natürlicher aus. Es liegt aber auch daran, dass es die gesamte Bildressource beeinflusst und wie man seinen Einflussbereich vernünftigerweise zu einem wichtigen Thema in der Entwicklung geworden ist.
In diesem Artikel werden mehrere gängige Methoden eingeführt, um den Umfang von Imagesantialias () zu begrenzen und seine Auswirkungen auf unnötige Teile zu vermeiden.
$img = imagecreatetruecolor(200, 200);
imageantialias($img, true);
$black = imagecolorallocate($img, 0, 0, 0);
imageline($img, 0, 0, 200, 200, $black);
Wie oben gezeigt, ist imagesantialias () in der gesamten Bildressource $ IMG aktiviert, und nach dem festgelegten Einsatz wird die Anti-Aliasing für nachfolgende Zeichenvorgänge dieser Ressource aktiviert.
ImageAntialias () wirkt sich auf die gesamte GD-Bildressource aus, dh, sobald die Anti-Aliasing in einer Ressource aktiviert ist, werden alle nachfolgenden Grafikzeichnungsvorgänge auf dieser Ressource beeinflusst. Die GD-Bibliothek unterstützt nicht das "einzige Anti-Aliasing für einen bestimmten Bereich", sodass wir sie nicht direkt kontrollieren können, um nur auf einen bestimmten Teil davon zu reagieren.
Obwohl GDs Imagesantialias () selbst keine lokale Kontrolle unterstützt, gibt es einige indirekte Möglichkeiten, um die Kontrolle "lokaler Anti-Aliasing" zu erreichen.
Wir können Imagesantialias () auf einer separaten kleinen Bildressource aktivieren und nach Abschluss der Zeichnung wieder in das Hauptbild zusammenführen.
$main = imagecreatetruecolor(400, 400);
$sub = imagecreatetruecolor(100, 100);
imageantialias($sub, true);
$red = imagecolorallocate($sub, 255, 0, 0);
imagefilledellipse($sub, 50, 50, 80, 80, $red);
imagecopy($main, $sub, 150, 150, 0, 0, 100, 100);
Diese Methode kann Anti-Aliasing effektiv "lokalisieren" und nur das $ Sub- Subimage beeinflussen, ohne andere Zeichenvorgänge des Hauptbildes $ Main zu beeinflussen.
Ähnlich wie Methode 1, aber besser geeignet, um mehrere komplexe Schichten miteinander zu kombinieren. Zum Beispiel:
$background = imagecreatetruecolor(400, 400);
$foreground = imagecreatetruecolor(400, 400);
imageantialias($foreground, true);
$white = imagecolorallocate($background, 255, 255, 255);
$blue = imagecolorallocate($foreground, 0, 0, 255);
imagefill($background, 0, 0, $white);
imagefilledpolygon($foreground, [100,100, 300,100, 200,300], 3, $blue);
imagecopy($background, $foreground, 0, 0, 0, 0, 400, 400);
Sie können Anti-Aliasing -Vordergrund aktivieren, während der Hintergrund standardmäßig bleibt, und es funktioniert gut, wenn die endgültige Verschmelzung ist.
Obwohl dies keine direkte Kontrolle von Imagesantialias () ist, kann es in einigen Fällen durch Filter geglättet werden.
$img = imagecreatetruecolor(200, 200);
// ... Zeichnen Sie eine Grafik ...
imagefilter($img, IMG_FILTER_GAUSSIAN_BLUR);
Beachten Sie, dass dieser Ansatz "späte Unschärfe" ist und die echte Anti-Aliasing nicht ersetzen kann, aber in einigen stilisierten Bildern ähnliche visuelle Effekte erzielen kann.
ImageAntialias () ist eine globale Einstellung, die in lokalen Bereichen eines Bildes nicht direkt aktiviert oder deaktiviert werden kann. Mit den folgenden Methoden können wir jedoch den Aktionsumfang in gewissem Maße "begrenzen":
Teilen Sie die Grafiken in mehrere Subimage-Ressourcen auf, wodurch die Anti-Aliasing am Subimage;
Lokale Verarbeitung unter Verwendung der Bildsynthese;
Die visuelle Glättung wird bei Bedarf in Kombination mit Bildfiltern durchgeführt.
Obwohl diese Methoden den Anti-Aliasing-Mechanismus von GD nicht grundlegend verändern können, reichen sie aus, um die meisten Entwicklungsszenarien zu bewältigen, die sowohl Bildqualität als auch Effizienz erfordern.