imagecreatefrompng 가 안 먹던 현상 해결
결론부터 말하자면 imagecreatefrompng 가 작동이 안되던게 아니라,
눈에 보이는 파일확장자와, mime 타입의 확장자가 달라서 발생한 문제였다...
해당 문제를 어떻게 직면하게 되었냐면은,
카메라로 사진을 바로 찍어서 이미지를 업로드하면, 이미지가 자동으로 회전이 되지 않는다는 것이었다.
그래서 확인해보니, mime 타입의 확장자와 실제파일명의 확장자와 다르다는 것을 확인하였다.
카메라 앱으로 바로찍은 이미지의 경우 이미지 확장자가 눈에 보이기에는 xxxxx.png 파일로 나오는데, 실제로 getimagesize 로 확장자를 알아보면 jpeg 로 나오는 것이었다.
이건 안드로이드 버그 아니냐?????
//이거 사용하면 안됨
//$tmp = explode(".", $image_path);
//$ext = $tmp[sizeof($tmp) - 1];
//mime 타입으로 처리하는게 정확함 2020-01-30
//웃긴게 파일명은 png 인데 mime 타입은 jpg 였음 -_-;
$img_info = getimagesize($image_path);
$tmp = explode("/", $img_info['mime']);
$ext = $tmp[1];
if($ext == "jpg" || $ext == "jpeg"){
$image = imagecreatefromjpeg($image_path);
}else if($ext == "png"){
$image = imagecreatefrompng($image_path);
}else if($ext == "bmp" || $ext == "wbmp"){
$image = imagecreatefromwbmp($image_path);
}else if($ext == "gif"){
$image = imagecreatefromgif($image_path);
}
$exif = exif_read_data($image_path);
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,$image_path);
}else if($ext == "png"){
imagepng($image,$image_path);
}else if($ext == "bmp" || $ext == "wbmp"){
imagewbmp($image,$image_path);
}else if($ext == "gif"){
imagegif($image,$image_path);
}
}