Position actuelle: Accueil> Derniers articles> Comment utiliser la fonction ImageeANtialias pour réaliser l'effet anti-alias lors du dessin de cercles en utilisant ImageLlipse ()?

Comment utiliser la fonction ImageeANtialias pour réaliser l'effet anti-alias lors du dessin de cercles en utilisant ImageLlipse ()?

M66 2025-06-23

Avant d'introduire la méthode d'implémentation, comprenez d'abord deux fonctions clés:

  • ImageEllipse (Resource $ Image, int $ cx, int $ cy, int $ width, int $ height, int $ couleur) : dessinez une ellipse dans l'image.

  • Imageantalias (Ressource $ image, bool $ activé) : activer ou désactiver l'anti-aliasing.

Mais il convient de noter que ImageeAralias () ne fonctionne que pour les graphiques dessinés en utilisant des fonctions telles que ImageLeline () , ImageRectangle () , etc., et ne prend pas effet sur ImageLlipse () . C'est une fosse que de nombreux développeurs sont enclins à ignorer.

Alors, comment réaliser l'anti-aliasing lors du dessin de cercles?

Nous devons modifier une stratégie, utiliser une résolution plus élevée pour dessiner les graphiques et rétrécir l'image, ou simuler manuellement l'effet anti-aliasing. Voici une approche commune: Drawing High Resolution + Scale , qui est un moyen facile d'atteindre l'anti-aliasing sans l'aide d'une bibliothèque graphique supplémentaire.

Exemple de code

 <?php
// Définir le multiple de mise à l&#39;échelle,Par exemple3Dessiner à des moments résolution
$scale = 3;
$width = 200;
$height = 200;

$scaledWidth = $width * $scale;
$scaledHeight = $height * $scale;

// Créer de grandes ressources d&#39;image
$largeImage = imagecreatetruecolor($scaledWidth, $scaledHeight);
imageantialias($largeImage, true);

// Réglez la couleur de fond sur blanc et remplissez-le
$white = imagecolorallocate($largeImage, 255, 255, 255);
imagefill($largeImage, 0, 0, $white);

// Définir la couleur du cercle
$circleColor = imagecolorallocate($largeImage, 0, 0, 255);

// Dessiner une ellipse(En fait, c&#39;est un cercle)
$cx = $scaledWidth / 2;
$cy = $scaledHeight / 2;
$radius = min($scaledWidth, $scaledHeight) * 0.4;
imageellipse($largeImage, $cx, $cy, $radius * 2, $radius * 2, $circleColor);

// Créer une petite ressource d&#39;image cible
$finalImage = imagecreatetruecolor($width, $height);

// Réduire l&#39;image pour l&#39;anti-aliasing
imagecopyresampled($finalImage, $largeImage, 0, 0, 0, 0, $width, $height, $scaledWidth, $scaledHeight);

// Image de sortie
header('Content-Type: image/png');
imagepng($finalImage);

// Nettoyez la mémoire
imagedestroy($largeImage);
imagedestroy($finalImage);
?>

Effets et instructions

Dans cet exemple, nous dessinons d'abord un cercle plus grand en utilisant 3 fois la taille d'origine, puis utilisons la fonction ImageCopyResampled () pour réduire l'image à la taille cible. Ce processus équivaut à simuler l'anti-aliasing, et les bords de l'image de sortie semblent plus lisses.

Bien que ImageeRalias () ne soit pas valable pour ImageLlipse () , nous pouvons toujours contourner cette limitation par la stratégie de mise à l'échelle et générer des images de meilleure qualité. Si vous avez des exigences élevées pour le traitement d'image, il serait plus approprié d'envisager d'utiliser une bibliothèque de traitement d'image professionnelle telle que ImageMagick.

Suggestions d'extension

Si vous souhaitez enregistrer l'image sur le serveur au lieu du navigateur de sortie, vous pouvez utiliser la méthode suivante:

 imagepng($finalImage, '/path/to/save/image.png');

Ou générer un lien d'accès:

 $filename = 'https://m66.net/images/circle.png';
imagepng($finalImage, '/var/www/m66.net/images/circle.png');

Veuillez vous assurer que le chemin correspondant à m66.net a des autorisations d'écriture.

Cette méthode de mise à l'échelle convient également pour dessiner d'autres chiffres, tels que les polygones, les courbes libres, etc. Il s'agit d'une technique anti-aliasage couramment utilisée dans la bibliothèque GD.