CodeGym /Cursos Java /Python SELF PT /Trabalho com metadados

Trabalho com metadados

Python SELF PT
Nível 46 , Lição 3
Disponível

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.

Python

# 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

Python

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().

Python

# 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.

Python

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.
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION