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.
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.
<?php
// Définir le multiple de mise à l'é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'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'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'image cible
$finalImage = imagecreatetruecolor($width, $height);
// Réduire l'image pour l'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);
?>
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.
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.