화질을 잃지 않고 메타데이터 지우기: 다시 인코딩하는 것은 정리가 아닌 이유
사진의 메타데이터를 지우는 방법은 두 가지입니다. 하나는 데이터 블록을 걷어내고 이미지는 그대로 두는 것입니다. 다른 하나는 사진을 열어 다시 그리고 다시 저장하는 것입니다. 그 과정에서 메타데이터는 사라지지만 이미지도 바뀝니다. 그리고 때로는 메타데이터조차 사라지지 않습니다.
다시 인코딩한다는 것
JPEG나 HEIC는 손실 압축으로 이미지를 저장합니다. 저장할 때 눈에 잘 띄지 않는 정보를 버립니다. 누군가 사진을 열어 다시 저장하면 그 압축이 앞의 압축 위에 한 번 더 적용되고, 이미지는 조금 더 잃습니다. 한 번이면 알아보기 어렵지만, 여러 번이면 블록, 지저분한 가장자리, 바랜 색이 나타납니다.
많은 도구가 바로 이 방식으로 메타데이터를 지웁니다. 프로그래밍하기 가장 쉬운 방법이기 때문입니다. 사진을 캔버스에 그린 뒤 다시 내보냅니다. 되기는 하지만 대가가 따릅니다.
측정한 것
GPS가 담긴 3024 × 4032 시험용 사진을 세 가지 방법으로 처리했습니다. 비율은 사진마다 다릅니다. 디테일이 많은 사진은 매끈한 우리 사진보다 더 많이 잃습니다. 그러니 중요한 것은 무엇이 바뀌고 무엇이 바뀌지 않는지입니다.
- 브라우저에서 다시 그리기, 간단한 사이트들이 흔히 하는 방식: 픽셀의 1.8%가 바뀌었고 파일은 925 kB에서 742 kB가 되었습니다. GPS는 지웠지만, 다시 인코딩했습니다.
- macOS의 이미지 도구로 다시 저장하기(
sips), 품질 85: 픽셀의 16.8%가 바뀌었고 GPS는 남았습니다. 다시 인코딩하는 것은 정리가 아닙니다. - KillEXIF로: 픽셀이 하나도 바뀌지 않았습니다. 이미지 데이터는 바이트 하나까지 같고, GPS는 사라졌습니다.
- 품질 90으로 열 번 연달아 저장하기: 저장할 때마다 원본과의 차이가 커졌습니다. 다시 인코딩하지 않는 것이 중요한 이유입니다. 사진이 그런 도구를 거칠 때마다 조금씩 더 잃습니다.
도구가 다시 인코딩하는지 알아보는 방법
측정하지 않아도 알 수 있는 단서가 있습니다.
- 크기가 크게 바뀝니다. 메타데이터를 지우면 몇 킬로바이트, 썸네일이 있었다면 그보다 조금 더 줄어듭니다. 3 MB 사진이 2 MB로 나온다면 다시 압축된 것입니다.
- 저장할 때 「품질」을 고르게 합니다. 품질이 있다면 압축이 있습니다.
- 형식이 바뀝니다. HEIC를 넣었는데 JPEG가 나온다면 이미지 전체가 다시 인코딩된 것입니다.
- 이미지를 처리하는 만큼 시간이 걸립니다. 메타데이터 블록을 지우는 것은 거의 순식간이지만, 큰 사진을 다시 압축하는 것은 그렇지 않습니다.
KillEXIF가 하는 일
KillEXIF는 이미지를 건드리지 않고 메타데이터를 지웁니다. 파일 안에서 데이터 블록을 찾아 걷어내고 나머지는 그대로 복사합니다. 그런 다음 정리한 파일을 다시 읽어 사라져야 할 것이 사라졌는지 확인하고, 그렇다고 알려 줍니다. 「검증 완료: 민감한 정보가 남지 않았습니다」. 그리고 파일을 망가뜨리지 않고는 지울 수 없는 것이 있으면, 다시 압축하는 대신 그 사정을 설명합니다.
그래서 정리한 사진은 원본과 거의 같은 크기이고, 몇 번을 정리해도 아무것도 잃지 않습니다. 동영상도 마찬가지입니다. 메타데이터는 사라지고 동영상은 다시 인코딩되지 않습니다.