
Python으로 생성 AI에 전달할 사진의 위치 정보 삭제하기
요약
Pillow 라이브러리를 사용하여 JPEG/PNG 이미지에서 GPS 위치 정보만 선택적으로 삭제하는 Python 구현 방법을 소개합니다. 원본을 보존하면서 보안이 확보된 복사본을 만드는 워크플로우를 제안합니다.
핵심 포인트
- Pillow를 활용해 촬영 일시는 유지하고 GPS 정보만 삭제 가능
- 원본(raw)과 정제본(sanitized) 폴더를 분리하는 운영 방식 권장
- 이미지 재압축 없이 EXIF 태그 조작을 통해 효율적으로 처리
- 파일 자체의 시각적 정보나 타 포맷(HEIC 등)은 별도 주의 필요
사실 사진의 위치 정보를 삭제하는 작업은 생성 AI에 업로드하기 직전에 생각나서 하는 것이 아닙니다. 사진을 수집한 시점에 별도의 폴더에 삭제된 복사본을 만드는 운영 방식을 취하는 것이 지속 가능합니다.
영업 자료를 위해 점포 외관이나 이벤트 행사장 사진을 수집하는 상황에서는, 사진을 채팅에 던져 설명문을 만들거나 자료의 초안을 만들기도 합니다. 이때 원본 사진을 계속 사용하면, 공유 대상이 늘어난 뒤에 "이 이미지, 위치 정보가 남아있지 않을까"라며 뒤쫓게 됩니다. 솔직히 나중에 확인하는 것이 더 번거로웠습니다.
JPEG에는 EXIF라는 촬영 정보가 들어가며, 그중 GPSInfo에 위도·경도가 들어가는 경우가 있습니다. 찍혀 있는 대상만을 보고 있으면 알아채기 어려운 부분입니다.
이번에는 Pillow 11.3.0을 사용하여 GPS 정보만 삭제하고, 촬영 일시 등의 다른 EXIF는 남길 수 있음을 확인했습니다. 사진의 내용을 가공하는 코드가 아닙니다.
삭제 처리를 마지막 체크 단계로 두면, 원본 이미지와 가공된 이미지가 같은 폴더에 섞이게 됩니다. 자료 담당자에게 전달한 사진을 다른 사람이 그대로 AI에 전달하는 것, 흔히 있는 흐름입니다.
그래서 저는 소재를 받으면 다음 순서를 따릅니다. raw에는 원본 이미지를 그대로 둔 채로, sanitized에 삭제된 복사본을 만듭니다. 이후 생성 AI나 외부 공유에 사용하는 것은 후자뿐입니다. 파일명에 "최종", "최신 버전"을 붙여서 미아가 되는 이야기와는 조금 별개로, 전달해도 좋은 소재의 보관 장소를 나누는 이야기입니다.
이 순서를 팀의 인수인계 전에 고정하고 있습니다.
다음 코드는 JPEG 또는 PNG를 입력받아 EXIF의 GPSInfo (태그 ID 0x8825)만 제거합니다. JPEG라면 원래의 양자화 테이블(Quantization Table)과 서브샘플링(Subsampling)을 계승하여 저장합니다.
import sys
from pathlib import Path
from PIL import Image
...
remove_gps.py로 저장하여 원본 파일을 덮어쓰지 않고 실행합니다.
python remove_gps.py raw/store.jpg sanitized/store.jpg
오늘 GPS 정보와 촬영 일시를 가진 32×24 픽셀의 JPEG로 실행해 보았습니다. 실행 결과는 다음과 같습니다.
GPS 정보를 삭제했습니다
/private/tmp/exif_gps_sample.jpg GPS= True DateTimeOriginal= 2026:07:21 09:30:00 size= (32, 24)
/private/tmp/exif_gps_removed.jpg GPS= False DateTimeOriginal= 2026:07:21 09:30:00 size= (32, 24)
GPS만 삭제되었고, 촬영 일시와 이미지 크기는 남았습니다. pop()으로 GPS용 IFD에 대한 참조를 제거한 뒤, 업데이트된 EXIF를 붙여서 저장했기 때문입니다. 이 부분이 은근히 효과적입니다. 이미지를 재압축하여 모든 정보를 버리는 것보다, 용도에 필요한 촬영 일시는 남길 수 있습니다.
이 코드가 삭제하는 것은 EXIF의 GPSInfo입니다. 사진 속 간판, 역 이름, 창밖의 풍경처럼 이미지 자체에서 알 수 있는 장소는 삭제되지 않습니다. 동영상, Live Photos, HEIC, XMP에 별도로 들어있는 위치 정보도 대상이 아닙니다. 우선 JPEG나 PNG만을 대상으로 하고, 대상 외의 것은 별도의 절차로 다루는 것이 안전합니다.
또 하나, 업로드 대상 서비스가 저장하는 이용 기록이나 파일명까지 삭제되는 것도 아닙니다. 위치 정보를 제거한 복사본을 만드는 것과, 사외로 내보내도 좋은 사진인지를 결정하는 것은 나누어서 생각하고 있습니다.
저라면 공유 폴더를 01_raw, 02_sanitized, 03_shared 세 가지로 구성하겠습니다. 권한을 복잡하게 만들지 않아도, 처음 보는 장소를 02_sanitized로 집중시키는 것만으로도 실수로 원본 이미지를 전달하는 횟수가 줄어듭니다. 매번 주의를 환기하는 것보다, 전달 순서를 한 번 정해두는 것이 현장에서는 더 잘 돌아갑니다.
이미지를 사용하는 업무에서는 모델이 새로워질수록 투입하는 소재의 양도 늘어날 것입니다. 위치 정보를 삭제하는 처리를 일회성 확인 작업으로 두지 않고, 소재의 입구에 배치해 둡니다. 이렇게 하면 자료 작성 속도를 늦추지 않으면서도, 공유 전의 불안감을 하나 줄일 수 있습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기