지난 몇 주 동안 저는 Objective-C에서 이미지 작업을하면서 많은 이상한 동작을 발견했습니다. 첫째, 다른 많은 사람들과 마찬가지로 카메라로 찍은 이미지 (또는 다른 사람의 카메라로 찍은 이미지와 나에게 MMS로 찍은 이미지)가 90도 회전되는 문제가 발생했습니다. 나는 왜 이것이 세계에서 일어나고 있는지 확신하지 못했지만 (그러므로 내 질문 ) 저렴한 해결책을 찾을 수있었습니다.
이번에는 왜 이런 일이 발생 합니까? Apple이 이미지를 회전시키는 이유는 무엇입니까? 카메라를 똑바로 세우고 사진을 찍을 때 위에서 언급 한 코드를 수행하지 않으면 사진을 저장하면 회전하여 저장됩니다. 이제 내 해결 방법은 며칠 전까지 만해도 괜찮 았습니다.
내 응용 프로그램은 이미지의 개별 픽셀, 특히 PNG의 알파 채널을 수정합니다 (따라서 모든 JPEG 변환은 내 시나리오에서 창 밖으로 던져집니다). 며칠 전 해결 코드 덕분에 앱에서 이미지가 제대로 표시되지만 알고리즘이 이미지의 개별 픽셀을 수정할 때 이미지가 회전 된 것으로 생각한다는 것을 알게되었습니다. 따라서 이미지 상단의 픽셀을 수정하는 대신 이미지 측면의 픽셀을 수정합니다 (회전해야한다고 생각하기 때문입니다)! 메모리에서 이미지를 회전하는 방법을 알 수 없습니다. 이상적으로는 해당 imageOrientation플래그를 모두 함께 지우는 것이 좋습니다.
여기 저를 당혹스럽게하는 또 다른 것이 있습니다 ... 제가 사진을 찍을 때, imageOrientation가 3으로 설정되어 있습니다. 제 해결 방법 코드는 이것을 깨닫고 뒤집을 수있을만큼 똑똑해서 사용자가 알아 차리지 못하도록합니다. 또한 이미지를 라이브러리에 저장하는 코드는이를 인식하고 뒤집은 다음 저장하여 카메라 롤에 제대로 표시되도록합니다.
해당 코드는 다음과 같습니다.
NSData* pngdata = UIImagePNGRepresentation (self.workingImage); //PNG wrap
UIImage* img = [self rotateImageAppropriately:[UIImage imageWithData:pngdata]];
UIImageWriteToSavedPhotosAlbum(img, nil, nil, nil);
이 새로 저장된 이미지를 내 앱에로드하면 imageOrientation0이됩니다-정확히 내가보고 싶은 것이므로 회전 해결 방법을 실행할 필요도 없습니다 (참고 : 카메라로 찍은 이미지와 달리 인터넷에서 이미지를로드 할 때 , imageOrientation는 항상 0이므로 완벽한 동작이됩니다.) 어떤 이유로 내 저장 코드가이 imageOrientation플래그 를 지우는 것 같습니다 . 사용자가 사진을 찍고 앱에 추가하자마자 해당 코드를 훔쳐 내 imageOrientation을 지우고 싶었지만 작동하지 않는 것 같습니다. 않습니다 UIImageWriteToSavedPhotosAlbum와 함께 뭔가 특별한을 imageOrientation?
이 문제에 대한 최선의 해결책 imageOrientation은 사용자가 이미지를 찍는 즉시 날려 버리는 것입니다. 나는 Apple이 이유 때문에 회전 동작을 수행했다고 가정합니다. 몇몇 사람들은 이것이 Apple 결함이라고 제안했습니다.
(... 아직 길을 잃지 않았다면 ... Note2 : 가로 사진을 찍으면 인터넷에서 찍은 사진처럼 모든 것이 완벽하게 작동하는 것 같습니다)
편집하다:
다음은 일부 이미지와 시나리오의 실제 모습입니다. 지금까지의 의견을 살펴보면이 이상한 동작은 단순한 iPhone 동작 이상인 것 같습니다.
이것은 내가 휴대 전화로 찍은 사진입니다 (올바른 방향에 유의). 사진을 찍었을 때 휴대 전화에서했던 것과 똑같이 나타납니다.

본인에게 이메일을 보낸 후 Gmail에 표시되는 이미지는 다음과 같습니다 (Gmail에서 제대로 처리하는 것처럼 보임).

다음은 이미지가 창에서 썸네일로 보이는 것입니다 (올바르게 처리되지 않은 것 같습니다).

그리고 다음은 Windows 사진 뷰어로 열었을 때의 실제 이미지 모습입니다 (여전히 제대로 처리되지 않음).

이 질문에 대한 모든 코멘트를 마친 후, 제가 생각하는 것은 다음과 같습니다. iPhone은 이미지를 찍고 "이를 제대로 표시하려면 90도 회전해야합니다"라고 말합니다. 이 정보는 EXIF 데이터에 있습니다. (기본적으로 수직 수직이 아닌 90도 회전해야하는 이유는 모르겠습니다.) 여기에서 Gmail은 EXIF 데이터를 읽고 분석하고 올바르게 표시 할 수있을만큼 똑똑합니다. 그러나 Windows는 EXIF 데이터를 읽을만큼 똑똑하지 않기 때문에 이미지가 부적절하게 표시됩니다 . 내 가정이 맞습니까?