Lorsque vous utilisez PHP pour le traitement d'image, la bibliothèque GD fournit une multitude de fonctions que les développeurs peuvent appeler. Parmi eux, Imageantialias () est une fonction importante pour améliorer la douceur des bords d'image. Mais dans les projets réels, ImageeRalias () n'est souvent pas utilisé isolément et est souvent utilisé en combinaison avec d'autres fonctions de filtre d'image (comme ImageFilter () ). Ainsi, dans ce cas, l'ordre de l'appel de fonction affectera-t-il l'effet de sortie de l'image? La réponse est oui.
Cet article explorera comment organiser raisonnablement l'ordre d'appel pour réaliser le meilleur effet de traitement d'image lors de l'utilisation d'ImageeRalias () avec d'autres fonctions de filtre (comme ImageFilter () , ImagesMooth () , ImageCopyResampled () , etc.).
Imageantalias (Ressource $ image, bool $ activer): bool
Cette fonction est utilisée pour activer ou désactiver la fonction anti-aliasage, agissant principalement sur la sortie des lignes, des arcs ou d'autres fonctions de dessin, ce qui rend les bords de l'image plus lisses.
$image = imagecreatetruecolor(300, 200);
imageantialias($image, true); // Activer l'anti-aliasing
Remarque: ImageeRalias () n'est valable que pour certaines fonctions de dessin, telles que ImageLeline () , ImagePolygon () , etc., et n'a aucun impact direct sur la mise à l'échelle ou le filtrage de l'image.
ImageFilter () fournit une variété d'options de filtre, telles que le flou, l'ajustement du contraste, l'affûtage, la niveale des gris, etc., qui sont généralement utilisés pour traiter les images générées.
imagefilter($image, IMG_FILTER_GAUSSIAN_BLUR);
Ceci est l'approche recommandée. Si vous devez dessiner un graphique et utiliser les effets anti-aliasing, vous devez d'abord activer ImageeRalias () , puis appeler la fonction de dessin.
$image = imagecreatetruecolor(300, 200);
imageantialias($image, true);
imageline($image, 0, 0, 300, 200, imagecolorallocate($image, 255, 0, 0));
Cette commande garantit que les lignes ont des bords plus lisses.
La fonction de filtre agit sur le contenu de l'image existant. Par conséquent, ImageFilter () doit être appelé une fois le dessin terminé, sinon il peut avoir un impact inattendu sur le processus de dessin intermédiaire.
// Commande correcte
$image = imagecreatetruecolor(300, 200);
imageantialias($image, true);
imagerectangle($image, 50, 50, 250, 150, imagecolorallocate($image, 0, 255, 0));
imagefilter($image, IMG_FILTER_GAUSSIAN_BLUR);
Si la fonction de filtre est appelée avant le dessin, elle traitera une image vierge et l'effet de filtre ne peut plus être superposé après le dessin.
ImageCopyResampled () régénera les informations sur les pixels de l'image, donc son ordre d'appel est également critique. Habituellement recommandé:
Si vous souhaitez filtrer l'image zoomée, vous devez d'abord évoluer puis filtrer;
Si vous effectuez un dessin complexe avant la mise à l'échelle, vous devez utiliser ImageeAralias () après le dessin et avant la mise à l'échelle.
$src = imagecreatefromjpeg('https://m66.net/images/sample.jpg');
$dst = imagecreatetruecolor(100, 100);
imagecopyresampled($dst, $src, 0, 0, 0, 0, 100, 100, imagesx($src), imagesy($src));
imagefilter($dst, IMG_FILTER_CONTRAST, -10);
Voici un flux de traitement d'image recommandé:
$image = imagecreatetruecolor(300, 200);
// 1. Activer l'anti-aliasing
imageantialias($image, true);
// 2. Dessin
imageline($image, 0, 0, 300, 200, imagecolorallocate($image, 0, 0, 255));
imageellipse($image, 150, 100, 200, 100, imagecolorallocate($image, 255, 0, 0));
// 3. Appliquer des filtres
imagefilter($image, IMG_FILTER_SMOOTH, 6);
// 4. Zoom ou économiser
$thumb = imagecreatetruecolor(150, 100);
imagecopyresampled($thumb, $image, 0, 0, 0, 0, 150, 100, 300, 200);
imagejpeg($thumb, '/var/www/html/output.jpg');
Imageantalias () doit être appelé avant la fonction de dessin;
ImageFilter () doit être utilisé après le dessin d'image;
ImageCopyResampled () doit être utilisé une fois tout le traitement terminé;
L'ordre de l'appel du traitement d'image détermine directement la qualité de la sortie finale.
La compréhension de l'ordre d'exécution des fonctions de traitement d'image et des appels de planification raisonnables peut efficacement améliorer la qualité et les performances du traitement d'image PHP. Pour les opérations d'image complexes, vous pouvez également envisager de combiner des fonctions de dessin de texte telles que ImageTtFText () pour obtenir des effets plus diversifiés.
Si vous rencontrez une mauvaise qualité de traitement d'image dans votre environnement de déploiement, vous pourriez aussi bien revoir votre ordre d'appel de fonction, et vous pouvez souvent obtenir des améliorations inattendues après les ajustements.