본문으로 건너뛰기
AZ Tools

업로드하면 사진이 돌아가는 이유

카메라를 돌려도 사진이 실제로 회전하는 일은 거의 없다. 센서는 본체에 고정되어 있어서 어느 방향으로 들든 같은 직사각형을 기록하고, 카메라는 파일 안에 방향 태그를 적어 볼 때 어느 쪽으로 돌려야 하는지를 알린다. 그 사진을 보여주는 프로그램은 각자 그 태그를 존중할지 말지를 스스로 정한다. 두 프로그램의 판단이 갈리는 순간, 한쪽에서는 사진이 옆으로 눕는다.

카메라는 사진을 돌리지 않고 쪽지를 남긴다

JPEG이나 HEIC 파일의 EXIF 메타데이터에는 Orientation이라는 항목이 있고, 정의된 값은 여덟 개다. 하나는 파일이 이미 똑바로 서 있다는 뜻이고, 그중 셋은 90도, 180도, 270도 회전이며, 나머지 넷은 회전에 좌우 반전을 더한 조합이다.

그래서 폰으로 찍은 세로 사진은 대개 가로 이미지에 4분의 1 바퀴 돌리라는 쪽지가 붙은 형태다. 저장된 픽셀은 정말로 옆으로 누워 있고, 그것을 똑바로 보여주는 뷰어는 그릴 때마다 태그를 적용하고 있는 것이다.

어떤 프로그램은 쪽지를 따르고 어떤 프로그램은 무시한다

웹 브라우저는 일반 이미지를 표시할 때 이 태그를 적용하며, 이제는 그게 기본 동작이다. 하지만 파일을 원시 픽셀까지 디코딩하는 쪽은 누워 있는 그림을 보게 된다. 그 시점에서 태그는 헤더에 남겨진 숫자 하나일 뿐이기 때문이다.

업로드가 사진을 돌려버리는 이유가 여기에 있다. 사이트는 파일을 본 게 아니라 다시 인코딩했다. 크기를 줄이고, 메타데이터를 벗기고, WebP로 바꾼 결과물에는 쪽지가 붙어 있지 않다. 스크립트도 마찬가지다. 이미지 라이브러리는 요청할 때만 회전하며, 방향을 먼저 적용하라고 명시하지 않으면 알아서 돌려주지 않는다.

두 번 돌아가는 것도 실제로 일어나는 고장이다

반대쪽 실수도 그만큼 흔하다. 어떤 도구가 픽셀은 똑바로 돌려놓고 태그는 4분의 1 바퀴 돌리라는 상태로 남겨두면, 그 태그를 존중하는 다음 뷰어가 이미 올바른 사진을 한 번 더 돌린다. 결과는 반대쪽으로 누운 사진이다.

사진이 90도 틀어져 나올 때 쓸모 있는 질문은 둘 중 어느 쪽이 틀렸느냐다. 픽셀인가, 쪽지인가. 둘은 별개의 정보이고, 한 파일이 스스로 모순될 수 있다.

파일에 적힌 가로세로는 사진이 아니라 센서의 것이다

1200만 화소 폰으로 찍은 세로 사진은 스스로를 4032 × 3024, 즉 가로 사진이라고 보고한다. 헤더의 크기는 저장된 픽셀을 설명하고, 화면에서 그것을 세로로 만드는 건 방향 태그다.

그 숫자로 자리를 잡아두는 레이아웃이나, 그리기 전에 가로 사진인지 판단하는 검사는 세로 사진에서 틀리게 된다. 갤러리에 엉뚱한 자리에 빈칸이 생기는 문제는 CSS가 아니라 대개 이것이다.

좌우가 뒤집힌 셀카도 같은 구조다

여덟 개 방향 값 중 넷은 좌우 반전을 포함한다. 전면 카메라가 거울처럼 뒤집힌 미리보기를 보여주기 때문에 생긴 값이다. 어떤 앱은 저장하기 전에 픽셀을 뒤집고, 어떤 앱은 센서 이미지를 그대로 저장한 뒤 반전을 태그에 적는다.

증상은 글자에서 드러난다. 옷의 로고나 뒤쪽 화이트보드가 한 프로그램에서는 거꾸로 읽히고 다른 프로그램에서는 제대로 읽힌다면, 반전이 픽셀이 아니라 태그에 들어 있다는 뜻이다.

썸네일이 본 사진과 다를 수 있다

EXIF에는 촬영 시점에 카메라가 써 넣은 작은 썸네일이 함께 들어갈 수 있다. 파일 탐색기나 사진 앱은 전체 이미지를 읽는 것보다 훨씬 빠르기 때문에 그 썸네일을 자주 보여준다.

그런데 편집기가 늘 그것을 갱신하지는 않는다. 자르거나 회전해서 사진은 바뀌었는데 예전 썸네일이 그대로 남으면, 미리보기와 열어본 파일이 서로 다른 그림을 보여주는 이상한 상황이 생긴다. 덜 눈에 띄지만 더 중요한 건, 잘라냈다고 생각한 부분이 썸네일 안에 남아 있을 수 있다는 점이다.

잘못 읽힐 수 없는 사진 만들기

무엇을 하기 전에 먼저 태그를 읽어라. 회전 문제인지 반전 문제인지, 애초에 파일이 돌려달라고 말하고는 있는지가 거기서 갈린다. 태그는 이미 똑바로라고 되어 있는데 사진이 누워 있다면, 앞단의 무언가가 픽셀을 되돌릴 수 없게 돌려놓은 것이다.

오래가는 해법은 회전을 픽셀에 구워 넣고 태그를 똑바름으로 바꾸거나 메타데이터를 아예 제거해서, 이후 어떤 프로그램도 다시 돌릴 수 없게 만드는 것이다. 업로드한 뒤가 아니라 업로드하기 전에 해야 한다. 사이트가 한 번 다시 인코딩하고 메타데이터를 벗기고 나면, 어떻게 돌려야 하는지 알려줄 쪽지는 이미 사라진 뒤다.

관련 도구