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.
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 )
où 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
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.
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)
$newX = $imageWidth - $oldX;
$newY = $oldY;
$newX = $oldX;
$newY = $imageHeight - $oldY;
$newX = $imageWidth - $oldX;
$newY = $imageHeight - $oldY;
Voici un exemple complet montrant comment retourner une image et corriger les coordonnées:
<?php
// Chargez l'image d'origine
$imagePath = 'https://m66.net/images/sample.jpg';
$image = imagecreatefromjpeg($imagePath);
// Obtenez la largeur et la hauteur de l'image
$width = imagesx($image);
$height = imagesy($image);
// Point de coordonnée d'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);
?>
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é.
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.