スマホからアップロードされた画像を回転処理する
スマホから縦で撮影した画像をアップロードした際に
パソコンから閲覧すると画像が横向きになることがある
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;
}
}