Como Extrair Dados EXIF de uma Foto
Toda foto tirada com uma câmera digital ou smartphone contém metadados ocultos chamados dados EXIF. Eles registram o modelo da câmera, velocidade do obturador, abertura, ISO, comprimento focal, o horário exato em que a foto foi tirada e — se os serviços de localização estavam ativos — coordenadas GPS com precisão de alguns metros.
Veja como lê-los.
Como os dados EXIF se parecem
Um JPEG típico de um smartphone contém campos como:
| Campo | Valor de exemplo |
|---|---|
| Make | Apple |
| Model | iPhone 15 Pro |
| DateTime | 2025:09:14 14:32:05 |
| ExposureTime | 1/120 |
| FNumber | f/1.8 |
| ISO | 64 |
| FocalLength | 6.86 mm |
| GPSLatitude | 23° 33' 2" S |
| GPSLongitude | 46° 38' 0" W |
| Software | iOS 18.0 |
As coordenadas GPS neste exemplo apontam para São Paulo. Se você postar uma foto tirada em casa, esses dados EXIF vão junto a menos que você os remova primeiro.
Lendo EXIF no navegador (sem software)
Visualizadores EXIF baseados em navegador analisam a imagem localmente sem enviá-la. Arraste uma foto e a ferramenta exibe todos os metadados incorporados. Sem conta, sem instalação, sem dados enviados a lugar nenhum.
É a opção mais rápida para consultas avulsas — verificar coordenadas de uma foto, confirmar um timestamp ou verificar configurações da câmera.
Lendo EXIF em Python com Pillow
A biblioteca Pillow lê dados EXIF de arquivos JPEG e TIFF.
from PIL import Image
from PIL.ExifTags import TAGS
def read_exif(path: str) -> dict:
img = Image.open(path)
raw_exif = img._getexif()
if not raw_exif:
return {}
return {TAGS.get(tag, tag): value for tag, value in raw_exif.items()}
exif = read_exif("photo.jpg")
for key, value in exif.items():
print(f"{key}: {value}")
Extraindo coordenadas GPS
Os dados GPS são armazenados em uma estrutura aninhada no EXIF. Veja como decodificá-los em graus decimais:
from PIL import Image
from PIL.ExifTags import TAGS, GPSTAGS
def get_gps_coordinates(path: str):
img = Image.open(path)
raw_exif = img._getexif()
if not raw_exif:
return None
# Encontrar a tag GPSInfo (número de tag 34853)
gps_info = None
for tag, value in raw_exif.items():
if TAGS.get(tag) == "GPSInfo":
gps_info = {GPSTAGS.get(t, t): v for t, v in value.items()}
break
if not gps_info:
return None
def to_decimal(dms, ref):
degrees, minutes, seconds = dms
decimal = float(degrees) + float(minutes) / 60 + float(seconds) / 3600
if ref in ("S", "W"):
decimal = -decimal
return decimal
lat = to_decimal(gps_info["GPSLatitude"], gps_info["GPSLatitudeRef"])
lon = to_decimal(gps_info["GPSLongitude"], gps_info["GPSLongitudeRef"])
return lat, lon
coords = get_gps_coordinates("photo.jpg")
if coords:
lat, lon = coords
print(f"https://maps.google.com/?q={lat},{lon}")
ExifTool (linha de comando)
ExifTool de Phil Harvey é o leitor EXIF mais completo disponível. Lida com centenas de formatos — JPEG, TIFF, formatos RAW, vídeo, PDF e mais.
# Instalar
brew install exiftool # macOS
sudo apt install libimage-exiftool-perl # Ubuntu/Debian
# Ler todos os metadados de um arquivo
exiftool photo.jpg
# Ler campos específicos
exiftool -DateTimeOriginal -GPSLatitude -GPSLongitude photo.jpg
# Extrair EXIF de todos os JPEGs de uma pasta
exiftool -r /path/to/folder
# Saída como JSON
exiftool -json photo.jpg
# Remover TODOS os metadados (privacidade)
exiftool -all= photo.jpg
Removendo dados EXIF para privacidade
Se você for compartilhar fotos publicamente e não quiser expor coordenadas GPS ou informações do dispositivo:
# ExifTool: remover tudo
exiftool -all= photo.jpg
# Remover mas manter o original (salva backup photo_original)
exiftool -all= -overwrite_original photo.jpg
Em Python com Pillow:
from PIL import Image
import io
def strip_exif(input_path: str, output_path: str):
img = Image.open(input_path)
# Cria nova imagem apenas com dados de pixel — sem EXIF
clean = Image.new(img.mode, img.size)
clean.putdata(list(img.getdata()))
clean.save(output_path)
Quais formatos de arquivo têm EXIF?
| Formato | Suporte EXIF |
|---|---|
| JPEG | Sim — o mais comum |
| TIFF | Sim |
| PNG | Não (usa metadados diferentes: chunks iTXt) |
| HEIC/HEIF | Sim (formato moderno do iPhone) |
| WebP | Limitado (chunk Exif básico) |
| RAW (CR2, NEF, ARW) | Sim — dados extensos da câmera |
| Sem EXIF (usa metadados XMP) | |
| Vídeo (MP4, MOV) | Não EXIF, mas contém hora de criação + GPS em atoms separados |
Pontos principais
- Dados EXIF estão incorporados em arquivos JPEG/TIFF e registram configurações da câmera, timestamps e coordenadas GPS.
- Ferramentas de navegador processam arquivos localmente — sem upload necessário para fotos sensíveis.
- Pillow do Python lida com EXIF básico; use ExifTool para extração abrangente em todos os formatos.
- Coordenadas GPS no EXIF são precisas o suficiente para identificar um endereço residencial — remova antes de compartilhar se a privacidade importar.
- Arquivos PNG não usam EXIF; procure chunks iTXt ou tEXt em vez disso.