안녕하세요. exif 때문에 이미지가 이상하게 돌아가는 경우가 있습니다. 이 때 (회전 정보가 있는) exif 정보를 제거하는 방법을 알아보겠습니다.

 


 먼저, 실습에 사용될 이미지는 여기에서 구할 수 있습니다. 제 pycharm에서 down-mirrored.jpg를 열어보겠습니다. down-mirrored.jpg입니다.

 

 아래쪽으로 뒤집어진 모양을 하고 있습니다. 원래 모양은 DOWN이 위로 오고, 다음 줄에 MIRRORED가 돠야 합니다. 회전 정보가 어딘가에 들어가 있음을 알 수 있어요.

 

 

 우리는 간단하게 이미지를 열고, exif_transpose 함수를 사용해 봅시다.

 

 

 이 함수의 설명을 보면, EXIF orientation tag가 있다면, 그 정보를 바탕으로 변환된 새로운 사진을 돌려주고, 원래 정보는 제거해 버립니다. 이 함수의 내부를 잠깐 보겠습니다.

 

 보시면, image.getexif() 함수에서 exif 정보를 얻어옵니다. 296, 282, 531, 274, 283과 같은 이상한 수들이 있어요. 이 수들에 대한 정보는 여기에서 얻을 수 있습니다. 이 중 274는 행과 열로 표시되는 이미지 방향이라는 것을 알 수 있습니다.

 

 

 이를 바탕으로 transpose 함수를 호출해서, 새로운 이미지를 만듭니다.

 

결과는 DOWN MIRRORED로 제대로 보임을 알 수 있습니다.

 


 이번에는 다른 이미지입니다. 좌우로 뒤집힌 모양을 하고 있어요.

 

 exif 정보에는 어떤 것이 담겨 있을까요? orientation이 2임을 주목해 주세요. FLIP_LEFT_RIGHT인데요. 좌우가 바뀐 모양임을 의미합니다. exif_transpose 함수로 exif에 들어있는 orientation 정보를 바탕으로 회전을 시킵니다. 그리고, exif 정보를 제거해 보겠습니다.

 

up-mirrored.jpg를 연 다음에, exif_transpose를 호출한 다음에 img.save를 합니다.

 

 그러면 좌우로 뒤집힌 사진이 원래대로 돌아옴을 볼 수 있습니다.