티스토리 뷰
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
'프로그램개발' 카테고리의 다른 글
[javascript] 팝업창으로 Form 데이타 전송(POST) (0) | 2024.08.22 |
---|---|
[ jquery ] checkbox를 radio 처럼 사용하기 (0) | 2024.08.07 |
[ PHP ] __DIR__ 또는 __FILE__ 등 마법상수(magic constants) (0) | 2024.07.25 |
[ Kotlin ] 플로팅 액션 버튼(FAB) (0) | 2024.07.24 |
[ Kotlin ] lateinit 과 lazy 기능 정리 (0) | 2024.07.23 |