スマホからアップロードされた画像を回転処理する

スマホからアップロードされた画像を回転処理する

スマホから縦で撮影した画像をアップロードした際に
パソコンから閲覧すると画像が横向きになることがある

Exifの『Orientation』の値が原因で、これをPHPのImageMagickを使って修正する

$path = 'image.jpg';

$image = new Imagick($path);
$format = strtolower($image->getImageFormat());

if($format === 'jpeg')
{
	$orientation = $image->getImageOrientation();
	
	switch ($orientation)
	{
		case imagick::ORIENTATION_UNDEFINED:
			break;
		case imagick::ORIENTATION_TOPLEFT:
			break;
		case imagick::ORIENTATION_TOPRIGHT:
			$image->flopImage();
			$image->setimageorientation(imagick::ORIENTATION_TOPLEFT);
			$image->writeImage();
			break;
		case imagick::ORIENTATION_BOTTOMRIGHT:
			$image->rotateImage(new ImagickPixel(), 180);
			$image->setimageorientation(imagick::ORIENTATION_TOPLEFT);
			$image->writeImage();
			break;
		case imagick::ORIENTATION_BOTTOMLEFT:
			$image->rotateImage(new ImagickPixel(), 180);
			$image->flopImage();
			$image->setimageorientation(imagick::ORIENTATION_TOPLEFT);
			$image->writeImage();
			break;
		case imagick::ORIENTATION_LEFTTOP:
			$image->rotateImage(new ImagickPixel(), 90);
			$image->flopImage();
			$image->setimageorientation(imagick::ORIENTATION_TOPLEFT);
			$image->writeImage();
			break;
		case imagick::ORIENTATION_RIGHTTOP:
			$image->rotateImage(new ImagickPixel(), 90);
			$image->setimageorientation(imagick::ORIENTATION_TOPLEFT);
			$image->writeImage();
			break;
		case imagick::ORIENTATION_RIGHTBOTTOM:
			$image->rotateImage(new ImagickPixel(), 270);
			$image->flopImage();
			$image->setimageorientation(imagick::ORIENTATION_TOPLEFT);
			$image->writeImage();
			break;
		case imagick::ORIENTATION_LEFTBOTTOM:
			$image->rotateImage(new ImagickPixel(), 270);
			$image->setimageorientation(imagick::ORIENTATION_TOPLEFT);
			$image->writeImage();
			break;
	}
}

Comments are closed.