【php】スマホで画像アップロード時に画像が変な方向に回転してることの対処法
スマホの画像をphpなどを使ってアップロードすると、画像が90度回転されて保存されてしまっていることがあります。
これの対処をするにはExif回転情報を読み取って、それの通りに回転させてアップロードする必要があるんです。
コードを紹介します。
rotate関数の中で、Exif回転情報を使って画像を正しい方向に回転させています。
/**
* 画像登録処理
*/
private function registerPhotoAndMovie()
{
// 一時保存ファイル取得
$inputName = $_FILES['file']['tmp_name'];
//EXIF情報の取得
$exif = @exif_read_data($inputName);
$exif = $exif ? $exif : [];
$image = imagecreatefromstring(file_get_contents($inputName));
// 画像の回転処理
$image = $this->rotate($image, $exif);
// 保存
imagejpeg($image, "保存先を指定");
}
/**
* 画像を回転させる
* @param resource $image
* @param array $exif
* @return resource
*/
function rotate($image, array $exif)
{
$orientation = $exif['Orientation'] ?? 1;
switch ($orientation) {
case 1: //no rotate
break;
case 2: //FLIP_HORIZONTAL
imageflip($image, IMG_FLIP_HORIZONTAL);
break;
case 3: //ROTATE 180
$image = imagerotate($image, 180, 0);
break;
case 4: //FLIP_VERTICAL
imageflip($image, IMG_FLIP_VERTICAL);
break;
case 5: //ROTATE 270 FLIP_HORIZONTAL
$image = imagerotate($image, 270, 0);
imageflip($image, IMG_FLIP_HORIZONTAL);
break;
case 6: //ROTATE 90
$image = imagerotate($image, 270, 0);
break;
case 7: //ROTATE 90 FLIP_HORIZONTAL
$image = imagerotate($image, 90, 0);
imageflip($image, IMG_FLIP_HORIZONTAL);
break;
case 8: //ROTATE 270
$image = imagerotate($image, 90, 0);
break;
}
return $image;
}
ディスカッション
コメント一覧
まだ、コメントがありません