4908
2016-09-23 03:32:50
0
이미지 규격에 따른 문제입니다.
JPEG의 경우 손실형 압축 및 JPEG 알고리즘의 특성상 이미지를 회전하면 이미지 자체를 재인코딩 해야하는 문제가 있습니다.
당연히 재인코딩으로 인한 화질의 열화도 발생하고요.
이를 해결하기 위해, JPEG규격은 헤더에 로테이션 정보가 담겨 있습니다.
단순히 이미지 회전만 할 시에는 데이터를 재인코딩 하는 것이 아니라, 기존에 있던 데이터를 그대로 쓰되 화면에 렌더링 할 때 로테이션 정보에 따라 회전시킵니다.
데이터를 디코딩 한 후에 나온 RGB 맵을 헤더의 로테이션 정보에 따라 회전시키면 화질의 열화 없이 사진이 회전되어 보이도록 할 수 있기 때문입니다.
그리고 상당수의 폰카들의 경우 카메라로부터 나온 raw데이터를 가공하는 것이 아니라, OS의 카메라 제어 API가 생성해준 JPEG 파일을 기준으로 동작하는 경우가 많기 때문에 스마트장치에서 가로모드 혹은 세로모드로 찍을 경우 실제로 가로/세로 데이터가 저장되기 보다는 헤더의 로테이션 값만 맞추어 저장하는 경우가 많습니다.
그리고 이미지파일은 헤더규격을 공유한느 경우가 많아서, 다른 종류의 이미지 파일들도 가능하면 로테이션 정보를 확인해야합니다.
이런 경우 서버에서 파일을 저장할 때, 혹은 클라이언트에서 업로드 할 때 JPEG의 헤더파일을 읽어서 로테이션 정보를 리사이즈된 파일의 헤더에도 추가해 주거나 리사이즈 전에 헤더파일을 읽어서 리사이즈 시 이미지 회전을 같이 시켜줘야 합니다.
일부 브라우저에서만 문제가 발생하는 것으로 보아, 서버 전송 혹은 서버에 저장시에 실제 데이터를 회전시켜 주셔야 할것 같습니다.