Lors de l'utilisation de PHP pour le traitement d'image, la fonction ImageeANtialias () est souvent utilisée pour améliorer la douceur des bords d'image, réduisant ainsi l'effet de déchaînement. Cependant, de nombreux développeurs ont constaté dans des applications pratiques que la fonction ne prend pas effet comme prévu, et l'image a toujours des bords de déchaînement évidents. Alors, quelle est la raison pour laquelle Imageantialias () est invalide? Comment réaliser correctement l'anti-aliasing? Cet article effectuera une analyse approfondie de ce problème et proposera des solutions réalisables.
Imageantalias (Resource $ image, bool $ activé): Bool est une fonction fournie par la bibliothèque GD pour activer ou désactiver l'anti-aliasage des images. Cette fonction prend principalement en vigueur lors du dessin de lignes et de cercles et d'autres éléments graphiques. Il convient à l'étape "dessiner" de l'image, plutôt qu'à l'échelle ou à la conversion de l'image.
Points clés:
Seulement valable pour dessiner des graphiques (tels que Imageline () et ImageArc () );
Non valide pour l'échelle d'image (comme ImagesCale () , ImageCopyResampled () );
La fonction ne prend effet que sur les fonctions de dessin ultérieures après avoir été activée.
La fonction anti-aliasage n'est pas activée <br> De nombreux développeurs croient à tort que l'appel Imageantalias () ne peut prendre effet qu'une seule fois sur toutes les opérations graphiques, mais elle ne prendra effet que si vous appelez vrai avant le dessin:
$img = imagecreatetruecolor(200, 200);
imageantialias($img, true); // Doit être placé avant de dessiner
imageline($img, 0, 0, 200, 200, $black);
Utilisez des opérations bitmap, pas des dessins vectoriels <br> Si vous effectuez simplement la copie, la mise à l'échelle et d'autres opérations sur l'image, au lieu de dessiner à travers des fonctions telles que ImageLine () , ImageeAnialias () ne produira aucun effet. Par exemple:
// L'anti-aliasage n'est pas déclenché lors de la mise à l'échelle d'une image existante
imagecopyresized($dst, $src, 0, 0, 0, 0, 100, 100, 200, 200);
Alternative: utilisez l'imagecopyResampled () à l'échelle, ce qui est mieux.
Problème de version de la bibliothèque GD <br> Dans certaines versions de bibliothèque PHP ou GD plus anciennes, la fonction ImageeANtiAnias () est mal implémentée, et il y a même des bogues sans aucun effet après l'appel. Il est recommandé d'utiliser PHP version 7.4 ou plus et de s'assurer que GD prend en charge Freetype.
Mode d'image incorrect <br> Les effets anti-aliasing conviennent plus aux images créées avec ImageCreateTrueColor () que les images de basse qualité créées avec ImageCreate () . Les images de faible qualité ne prennent pas en charge la profondeur des couleurs complètes, affectant les performances anti-aliasing.
// Utilisation recommandée true color image
$img = imagecreatetruecolor(300, 300);
$img = imagecreatetruecolor(200, 200);
$black = imagecolorallocate($img, 0, 0, 0);
imageantialias($img, true); // Activer l'anti-aliasing
imageline($img, 10, 10, 190, 190, $black);
imagepng($img, 'https://m66.net/output/line.png');
imagedestroy($img);
$src = imagecreatefrompng('https://m66.net/input/image.png');
$dst = imagecreatetruecolor(100, 100);
imagecopyresampled($dst, $src, 0, 0, 0, 0, 100, 100, imagesx($src), imagesy($src));
imagepng($dst, 'https://m66.net/output/resampled.png');
imagedestroy($src);
imagedestroy($dst);
Les capacités anti-aliasing de la bibliothèque GD sont limitées après tout. Si vous avez besoin d'un traitement d'image de meilleure qualité, vous pouvez considérer les alternatives suivantes:
Imagick (extension PHP de ImageMagick) : prend en charge les fonctions de traitement d'image plus riches et les algorithmes anti-aliasing de meilleure qualité;
Caire : une bibliothèque graphique 2D qui prend en charge le dessin de haute qualité;
Services tiers : par exemple, la génération d'images et l'optimisation anti-aliasing sont effectuées à l'aide de l'API de traitement d'image.
Imageantalias () peut en effet améliorer le problème de déchaînement des images, mais uniquement s'il est correctement utilisé pour ses scénarios applicables et son ordre d'appel. Si vous constatez que cela ne fonctionne pas, c'est souvent parce que vous avez abusé de la fonction d'image, ignoré le type d'image GD ou avez des malentendus sur sa fonction. Il est recommandé de combiner ImageCopyResampled () , utiliser de vraies images couleur et mettre à jour la bibliothèque GD pour les meilleurs résultats. Pour les projets de développement qui poursuivent une qualité d'image plus élevée, vous pouvez également envisager d'introduire des outils de traitement d'image plus professionnels.