PHPのGDライブラリを使用して画像を処理する場合、 ImageFlip()は非常に便利な機能であり、画像を水平、垂直、または同時に迅速にフリップします。ただし、画像をひっくり返した後、画像上の画像座標系に基づいてラベル、座標ポイント、またはその他の位置マークがある場合、問題に直面します。元のポイントは、画像上の同じ位置に対応しなくなります。
この記事では、ImageFlip()関数を使用した後に座標系を正しく調整する方法を紹介して、画像上の注釈または要素がまだ予想される位置に表示されます。
PHPのImageFlip()関数は、PHP 5.5以降に提供され、画像のフリップに使用されます。
bool imageflip ( GdImage $image , int $mode )
ここで、 $モードは次のいずれかになります。
IMG_FLIP_HORIZONTAL :水平フリップ
img_flip_vertical :垂直フリップ
IMG_FLIP_BOTH :水平および垂直に同時にフリップします
座標ポイント(x、y)でマークされた画像があるとします。 ImageFlip()を使用して画像を水平にフリップし( IMG_FLIP_HORIZONTAL )、この時点で画像ピクセルで(x、y)も反対側に反転し、元の座標は不正確です。
元の画像の幅は500pxです
元の座標ポイントは(100、200)です
ひっくり返した後、ポイントは実際には(500-100 = 400、200)でなければなりません
$newX = $imageWidth - $oldX;
$newY = $oldY;
$newX = $oldX;
$newY = $imageHeight - $oldY;
$newX = $imageWidth - $oldX;
$newY = $imageHeight - $oldY;
画像をひっくり返して正しい座標を示す完全な例を示します。
<?php
// 元の画像をロードします
$imagePath = 'https://m66.net/images/sample.jpg';
$image = imagecreatefromjpeg($imagePath);
// 画像の幅と高さを取得します
$width = imagesx($image);
$height = imagesy($image);
// 元の座標ポイント
$oldX = 100;
$oldY = 200;
// 水平フリップを実行します
imageflip($image, IMG_FLIP_HORIZONTAL);
// 新しい座標計算
$newX = $width - $oldX;
$newY = $oldY;
// 新しい座標ポイントをマークします(赤)
$red = imagecolorallocate($image, 255, 0, 0);
imagefilledellipse($image, $newX, $newY, 10, 10, $red);
// 出力画像
header('Content-Type: image/jpeg');
imagejpeg($image);
imagedestroy($image);
?>
座標変換ロジックは、画像フリップパターンに密接に関連しており、正確に一致する必要があります。
複数の座標ポイントをバッチで変換する必要がある場合、それらを処理のために機能にカプセル化することをお勧めします。
画像コンテンツがユーザーのアップロードからのものである場合は、セキュリティの問題を回避するために、最初に画像サイズを確認し、入力してください。
ImageFlip()は画像を処理するための非常に効率的なツールですが、画像の「座標意味」を一貫性を保つには、フリップ後に座標位置を積極的に計算して更新する必要があります。この手法を習得することにより、インタラクティブマーキング、画像注釈ツール、グラフィカルな位置決めシステムなど、より柔軟な画像処理機能をPHPに実装できます。