1. Trabalhando com metadados EXIF
Os metadados EXIF armazenam informações sobre características da imagem, como parâmetros de captura (ISO, exposição, abertura), data de criação, orientação e até mesmo as coordenadas do local da captura. Os dados EXIF podem ser extraídos e utilizados para análise de imagens ou automação de seu processamento.
Extraindo dados EXIF
Os metadados EXIF podem ser extraídos usando o atributo info
ou getexif()
. O método
getexif()
fornece acesso a todo o conjunto de dados EXIF, caso estejam presentes na imagem.
# Extração de dados EXIF
exif_data = image._getexif()
# Verificação da presença de EXIF
if exif_data is not None:
for tag_id, value in exif_data.items():
tag = Image.ExifTags.TAGS.get(tag_id, tag_id)
print(f"{tag}: {value}")
else:
print("Dados EXIF não encontrados.")
Neste código, Image.ExifTags.TAGS
é usado para decodificar os identificadores de tags EXIF em
nomes legíveis, como "DateTime"
, "ExposureTime"
,
"ISOSpeedRatings"
, etc. Se a imagem não contiver dados EXIF, a função simplesmente exibirá
uma mensagem informando isso.
2. Extração de metadados chave
Os metadados EXIF geralmente incluem parâmetros de captura, como resolução, orientação e geolocalização. Vamos ver como obter alguns desses valores, caso estejam presentes nos dados EXIF.
Extração de data/hora da captura, resolução e orientação
from PIL.ExifTags import TAGS
# Verificação da presença de dados EXIF
if exif_data is not None:
# Inicialização de variáveis para armazenar os valores
date_time = None
orientation = None
resolution = None
for tag_id, value in exif_data.items():
tag = TAGS.get(tag_id, tag_id)
# Extração dos dados pelas tags
if tag == "DateTime":
date_time = value
elif tag == "Orientation":
orientation = value
elif tag == "XResolution" or tag == "YResolution":
resolution = value
print("Data e hora da captura:", date_time)
print("Orientação:", orientation)
print("Resolução:", resolution)
else:
print("Dados EXIF não encontrados.")
Neste exemplo, os valores para DateTime
(data e hora da captura),
Orientation
(orientação da imagem) e XResolution
/YResolution
(resolução da imagem) são extraídos. Esses dados frequentemente são úteis para organizar fotos ou criar relatórios.
3. Adicionando e editando metadados EXIF
Embora o Pillow suporte de forma limitada a adição de dados EXIF, é possível manter os metadados existentes ao converter imagens, caso eles estejam presentes na imagem original.
Exemplo: Mantendo os metadados na conversão
Para manter os dados EXIF ao salvar a imagem, use o parâmetro exif
ao
chamar o método save()
.
# Verificação da presença de EXIF e salvamento com metadados
if exif_data is not None:
exif_bytes = image.info['exif']
image.save("converted_with_exif.jpg", exif=exif_bytes)
else:
print("Dados EXIF ausentes.")
Este código mantém os dados EXIF ao converter uma imagem para outro formato, permitindo que os parâmetros de captura originais sejam preservados.
4. Exemplos:
Exemplo de trabalho completo com formatos e metadados EXIF
Por fim, vamos ver um exemplo que converte uma imagem, otimiza-a e mantém os dados EXIF.
from PIL import Image, ExifTags
# Abrindo a imagem
image = Image.open("original.jpg")
# Verificação da presença de dados EXIF
exif_data = image._getexif()
if exif_data:
exif_bytes = image.info['exif'] # Mantém os dados EXIF para uso posterior
else:
print("Dados EXIF ausentes.")
# Conversão da imagem para PNG e otimização
image_png = image.convert("RGB")
image_png.save("optimized_image.png", optimize=True)
# Conversão para JPEG, mantendo dados EXIF e reduzindo qualidade
if exif_data:
image.save("compressed_with_exif.jpg", quality=85, exif=exif_bytes)
else:
image.save("compressed_without_exif.jpg", quality=85)
Este código inclui:
- Conversão de imagem para o formato PNG com otimização.
- Conversão para o formato JPEG com redução de qualidade para otimização de tamanho.
- Manutenção dos dados EXIF durante a conversão, caso estejam presentes.
Aplicações práticas de trabalho com formatos e metadados EXIF
- Otimização de imagens para web: Converter imagens para formatos otimizados, como JPEG e PNG, reduz o tamanho do arquivo e acelera o carregamento de páginas.
- Extração de dados para relatórios: Os metadados EXIF contêm informações sobre os parâmetros de captura, que podem ser úteis para análise de imagens e criação de relatórios.
- Manutenção de metadados durante edições: Ao editar imagens, é possível manter os parâmetros de captura originais, o que é útil para arquivamento e documentação.
GO TO FULL VERSION