티스토리 뷰

728x90

exif_read_data() 함수를 이용하여 이미지 파일의 EXIF 메타정보를 얻을 수 있습니다.

EXIF 메타정보는 디지털카메라에서 생성된 JPEG/TIFF이미지에 확인이 가능하며, EXIF의 회전정보를 통해 이미지가 회전되어 있는지 확인 후 회전되어 있는 이미지이면 다시 회전을 시켜주면 됩니다.

1. 첨부파일 업로드 회전 정보확인

// upload html //
<form name="form" enctype="multipart/form-data" action="./upload_ok.php">
<input type="file" name="img" />
</form>

// upload_ok.php //
if(!empty($_FILES['img']['name']))
{
    if(function_exists("exif_read_data"))
    {
        $exif = exif_read_data($_FILES['img']['tmp_name']);
        print_r($exif);
    }
}

// 결과 //
Array
(
    [FileName] => phpB2VoGR
    [FileDateTime] => 1722402041
    [FileSize] => 166546
    [FileType] => 2
    [MimeType] => image/jpeg
    [SectionsFound] => ANY_TAG, IFD0, EXIF
    [COMPUTED] => Array
        (
            [html] => width="960" height="720"
            [Height] => 720
            [Width] => 960
            [IsColor] => 1
            [ByteOrderMotorola] => 1
        )

    [Orientation] => 6
    [Exif_IFD_Pointer] => 38
    [ExifImageWidth] => 960
    [ExifImageLength] => 720
)

 

2. 회전정보(Orientation) 통한 이미지 회전

if(preg_match("/^image/i", $_FILES['img']['type']))
{
    $ext = strtolower(pathinfo($_FILES['img']['name'], PATHINFO_EXTENSION));
    if(function_exists("exif_read_data"))
    {
        $exif = exif_read_data($_FILES['img']['tmp_name']);

        if($ext == "jpg" || $ext == "jpeg")
            $image = imagecreatefromjpeg($_FILES['img']['tmp_name']);
        if($ext == "gif")
            $image = imagecreatefromgif($_FILES['img']['tmp_name']);
        if($ext == "png")
            $image = imagecreatefrompng($_FILES['img']['tmp_name']);

        if(!empty($exif['Orientation']))
        {
            switch($exif['Orientation'])
            {
                case 8:
                    $image = imagerotate($image, 90, 0);
                break;
                case 3:
                    $image = imagerotate($image, 180, 0);
                break;
                case 6:
                    $image = imagerotate($image, -90, 0);
                break;
            }

            if($ext == "jpg" || $ext == "jpeg")
                imagejpeg($image, $_FILES['img']['tmp_name']);
            else if($ext == "png")
                imagepng($image, $_FILES['img']['tmp_name']);
            else if($ext == "gif")
                imagegif($image, $_FILES['img']['tmp_name']);
        }
    }
}
728x90
250x250
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Total
Today
Yesterday