Position actuelle: Accueil> Derniers articles> Comment garder le système de coordonnées d'image cohérent après le retournement d'une image

Comment garder le système de coordonnées d'image cohérent après le retournement d'une image

M66 2025-05-31

Lors du traitement des images à l'aide de la bibliothèque GD de PHP, ImageFlip () est une fonction très pratique qui retourne rapidement les images horizontalement, verticalement ou simultanément. Cependant, après le retournement de l'image, s'il y a des étiquettes, des points de coordonnées ou d'autres marques de position basées sur le système de coordonnées d'image sur l'image, un problème sera confronté: le point d'origine ne correspond plus à la même position sur l'image.

Cet article présentera comment ajuster correctement le système de coordonnées après avoir utilisé la fonction ImageFlip () afin que les annotations ou les éléments de l'image soient toujours affichés dans la position attendue.

ImageFlip Introduction

La fonction ImageFlip () de PHP est fournie depuis PHP 5.5 et est utilisée pour retourner les images:

 bool imageflip ( GdImage $image , int $mode )

le mode $ peut être l'un des éléments suivants:

  • Img_flip_horizontal : flip horizontal

  • IMG_FLIP_VERTICAL : Flip vertical

  • Img_flip_both : flip horizontalement et verticalement simultanément

Description du scénario du problème

Supposons que nous ayons une image marquée d'un point de coordonnée (x, y) . Nous utilisons ImageFlip () pour retourner l'image horizontalement ( img_flip_horizontal ), et à ce moment le pixel d'image où (x, y) est également retourné de l'autre côté, et les coordonnées originales sont inexactes.

Par exemple:

  • La largeur de l'image d'origine est de 500px

  • Le point de coordonnées d'origine est (100, 200)

  • Après retournement, le point devrait en fait être (500 - 100 = 400, 200)

Solution: Remap coordonnées Points

Nouvelle méthode de calcul des coordonnées après un retournement horizontal:

 $newX = $imageWidth - $oldX;
$newY = $oldY;

Nouvelles coordonnées après un retournement vertical:

 $newX = $oldX;
$newY = $imageHeight - $oldY;

Flip en même temps:

 $newX = $imageWidth - $oldX;
$newY = $imageHeight - $oldY;

Exemple de code

Voici un exemple complet montrant comment retourner une image et corriger les coordonnées:

 <?php
// Chargez l&#39;image d&#39;origine
$imagePath = 'https://m66.net/images/sample.jpg';
$image = imagecreatefromjpeg($imagePath);

// Obtenez la largeur et la hauteur de l&#39;image
$width = imagesx($image);
$height = imagesy($image);

// Point de coordonnée d&#39;origine
$oldX = 100;
$oldY = 200;

// Effectuer un flip horizontal
imageflip($image, IMG_FLIP_HORIZONTAL);

// Nouveau calcul de coordonnées
$newX = $width - $oldX;
$newY = $oldY;

// Marquez de nouveaux points de coordonnées(rouge)
$red = imagecolorallocate($image, 255, 0, 0);
imagefilledellipse($image, $newX, $newY, 10, 10, $red);

// Image de sortie
header('Content-Type: image/jpeg');
imagejpeg($image);
imagedestroy($image);
?>

Conseils

  • La logique de conversion de coordonnées est étroitement liée au motif de flip d'image et doit être appariée avec précision.

  • Lorsque plusieurs points de coordonnées doivent être convertis en lots, il est recommandé de les encapsuler en fonctions de traitement.

  • Si le contenu de l'image provient d'un téléchargement d'utilisateur, assurez-vous de vérifier la taille de l'image et de taper d'abord pour éviter les problèmes de sécurité.

Conclusion

ImageFlip () est un outil très efficace pour le traitement des images, mais pour maintenir la "signification des coordonnées" dans l'image cohérente, nous devons calculer activement et mettre à jour la position de coordonnées après flip. En maîtrisant cette technique, vous pouvez implémenter des fonctions de traitement d'image plus flexibles dans PHP, telles que le marquage interactif, les outils d'annotation d'image ou les systèmes de positionnement graphique.