カメラ画像には Exif が埋め込まれており、向きの情報も持っている。
スマホなどで撮ったカメラ画像は、表示時にこの向きを考慮して表示するかどうかは、表示するアプリ次第となる。

Webの場合はブラウザを通してみることになるので、あらかじめこの向きを通常の向きに修正してから、サーバに保存しておきたい。以下は、画像を向きに応じて回転、および反転させ、Exif 内の向きの情報を上書きする。

$image = new Imagick($tmp_file_name);
$orientation = $image->getImageOrientation();
switch ($orientation) {
	case imagick::ORIENTATION_UNDEFINED:	// 0
		break;
	case imagick::ORIENTATION_TOPLEFT:		// 1	そのまま
		break;
	case imagick::ORIENTATION_TOPRIGHT:		// 2	左右の鏡像
		$image->flopImage();
		$image->setimageorientation(imagick::ORIENTATION_TOPLEFT);
		$image->writeImage();
		break;
	case imagick::ORIENTATION_BOTTOMRIGHT:	// 3	180度回転
		$image->rotateImage(new ImagickPixel(), 180);
		$image->setimageorientation(imagick::ORIENTATION_TOPLEFT);
		$image->writeImage();
		break;
	case imagick::ORIENTATION_BOTTOMLEFT:	// 4	3+鏡像
		$image->rotateImage(new ImagickPixel(), 270);
		$image->flopImage();
		$image->setimageorientation(imagick::ORIENTATION_TOPLEFT);
		$image->writeImage();
		break;
	case imagick::ORIENTATION_LEFTTOP:		// 5	6+鏡像
		$image->rotateImage(new ImagickPixel(), 90);
		$image->flopImage();
		$image->setimageorientation(imagick::ORIENTATION_TOPLEFT);
		$image->writeImage();
		break;
	case imagick::ORIENTATION_RIGHTTOP:		// 6	右に90度回転
		$image->rotateImage(new ImagickPixel(), 90);
		$image->setimageorientation(imagick::ORIENTATION_TOPLEFT);
		$image->writeImage();
		break;
	case imagick::ORIENTATION_RIGHTBOTTOM:	// 7	8+鏡像
		$image->rotateImage(new ImagickPixel(), 270);
		$image->flopImage();
		$image->setimageorientation(imagick::ORIENTATION_TOPLEFT);
		$image->writeImage();
		break;
	case imagick::ORIENTATION_LEFTBOTTOM:	// 8	右に270度回転
		$image->rotateImage(new ImagickPixel(), 270);
		$image->setimageorientation(imagick::ORIENTATION_TOPLEFT);
		$image->writeImage();
		break;
}