【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;
}

スポンサーリンク

php

Posted by ton