Pendant le traitement de l'image de PHP, la fonction ImageeANtialias () est utilisée pour activer ou désactiver les effets anti-aliasing, améliorant ainsi la douceur des lignes ou des graphiques dans l'image. Cette fonction est principalement utilisée lors du dessin des lignes, des arcs, des rectangles et d'autres figures. En brouillant les bords, l'image semble plus fluide et plus naturelle. Mais c'est aussi parce qu'il affecte l'ensemble de la ressource d'image, comment contrôler raisonnablement son étendue d'influence est devenu un problème important dans le développement.
Cet article introduira plusieurs méthodes courantes pour limiter la portée de l'imagierAntialas () et pour éviter son impact sur les parties inutiles.
$img = imagecreatetruecolor(200, 200);
imageantialias($img, true);
$black = imagecolorallocate($img, 0, 0, 0);
imageline($img, 0, 0, 200, 200, $black);
Comme indiqué ci-dessus, ImageeRalias () est activé sur l'ensemble de la ressource d'image $ IMG , et une fois défini, l'anti-aliasing sera activé pour les opérations de dessin ultérieures de cette ressource.
Imageantalias () agit sur l'ensemble de la ressource d'image GD, c'est-à-dire qu'une fois que l'anti-aliasing est activé sur une ressource, toutes les opérations de dessin graphiques ultérieures sur cette ressource seront affectées. La bibliothèque GD ne prend pas en charge le "seul activer l'anti-aliasing pour un certain domaine", nous ne pouvons donc pas le contrôler directement pour agir sur une certaine partie de celui-ci.
Bien que l'imageantalias () de GD ne soutienne pas le contrôle local, il existe des moyens indirects pour obtenir le contrôle des effets «anti-aliasing local».
Nous pouvons activer ImageeANtiaLIAS () sur une petite ressource d'image séparée et la fusionner dans l'image principale après avoir terminé le dessin.
$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);
Cette méthode peut efficacement «localiser» l'anti-aliasing, n'affecter que le sous-sous-image $ , sans affecter les autres opérations de dessin de l'image principale $ Main .
Semblable à la méthode 1, mais plus adapté pour combiner plusieurs couches complexes ensemble. Par exemple:
$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);
Vous pouvez activer le premier plan anti-aliasing, tandis que le fond reste par défaut, et il fonctionne bien lorsque la fusion finale.
Bien qu'il ne s'agisse pas d'un contrôle direct de l'imageantialias () , il peut être lissé à travers des filtres dans certains cas.
$img = imagecreatetruecolor(200, 200);
// ... Dessiner un graphique ...
imagefilter($img, IMG_FILTER_GAUSSIAN_BLUR);
Notez que cette approche est «flou tardif» et ne peut pas remplacer un véritable anti-aliasing, mais peut obtenir des effets visuels similaires dans certaines images stylisées.
Imageantalias () est un paramètre global qui ne peut pas être activé ou désactivé directement sur les zones locales d'une image. Cependant, grâce aux méthodes suivantes, nous pouvons toujours "limiter" sa portée d'action dans une certaine mesure:
Divisez les graphiques en plusieurs ressources de submage, permettant un anti-aliasing sur la sous-image;
Traitement local utilisant la synthèse d'image;
Le lissage visuel est effectué en cas de besoin en combinaison avec des filtres d'image.
Bien que ces méthodes ne puissent pas changer fondamentalement le mécanisme anti-aliasing de GD, elles sont suffisantes pour traiter la plupart des scénarios de développement qui nécessitent à la fois la qualité et l'efficacité de l'image.