HEIC significa contêiner de imagem de alta eficiência. É a extensão do arquivo para as imagens capturadas para alguns dos dispositivos da Apple. É um contêiner que pode conter imagens HEIF de formato de imagem de alta eficiência. Neste artigo, discutiremos como extrair, atualizar e remover os metadados EXIF e XMP das imagens HEIF/HEIC em aplicativos Java.

EXIF, o Exchangeable Image File Format é o padrão que define como armazenar propriedades de metadados nas imagens e formatos de áudio mais comuns. XMP é um padrão de metadados baseado em XML, que pode armazenar qualquer conjunto de propriedades de metadados como pares de nome/valor.

Os tópicos a seguir são abordados abaixo

API Java para metadados EXIF e XMP

GroupDocs.Metadata fornece a API de manipulação de metadados para seus aplicativos Java. A API permite ler, atualizar, adicionar, limpar/remover e percorrer recursos para muitos formatos de arquivo. Ele suporta vários padrões de metadados como EXIF, IPTC e XMP. Documentos de processamento de texto, planilhas, apresentações, mensagens de e-mail, eBooks, imagens, desenhos AutoCAD, arquivos de áudio e vídeo, torrents, estão entre os formatos de documentos suportados. Mais precisamente, você pode visitar a documentação para obter a lista completa de formatos de arquivo suportados para manipulação de metadados.

Baixe e configure

Obtenha a biblioteca de metadados da seção downloads. Para seu aplicativo Java baseado em Maven, basta adicionar a seguinte configuração pom.xml. Depois disso, você pode tentar os exemplos deste artigo, bem como muitos outros exemplos disponíveis no GitHub. Para obter detalhes, você pode visitar a Referência da API.

<repository>
	<id>GroupDocsJavaAPI</id>
	<name>GroupDocs Java API</name>
	<url>http://repository.groupdocs.com/repo/</url>
</repository>
<dependency>
        <groupId>com.groupdocs</groupId>
        <artifactId>groupdocs-metadata</artifactId>
        <version>21.4</version> 
</dependency>

Leia dados EXIF de imagens HEIF / HEIC em Java

A seguir estão as etapas para ler e extrair dados EXIF de imagens HEIC e HEIF.

  • Carregue a imagem HEIF ou HEIC usando a classe Metadata.
  • Obtenha o pacote raiz.
  • Recupere o pacote EXIF do pacote raiz.
  • A partir do pacote EXIF, você pode percorrer as propriedades de dados EXIF.
  • Além disso, você pode obter as informações IFD (Image File Directory) e GPS do pacote EXIF.

O código a seguir mostra como obter dados EXIF, informações de metadados IFD e GPS da imagem HEIC usando Java.

// Leia EXIF, EXIF IFD, EXIF GPS Package de imagens HEIF / HEIC em Java
Metadata metadata = new Metadata("image.heic");
IExif root = (IExif) metadata.getRootPackage();
if (root.getExifPackage() != null) {
    String pattern = "%s : %s";
    // Obter informações do pacote EXIF
    for (TiffTag tag : root.getExifPackage().toList()) {
        System.out.println(String.format(pattern, tag.getName(), tag.getInterpretedValue()));
    }
    // Obter informações do pacote EXIF IFD
    for (TiffTag tag : root.getExifPackage().getExifIfdPackage().toList()) {
        System.out.println(String.format(pattern, tag.getName(), tag.getInterpretedValue()));
    }
    // Obter informações de GPS
    for (TiffTag tag : root.getExifPackage().getGpsPackage().toList()) {
        System.out.println(String.format(pattern, tag.getName(), tag.getInterpretedValue()));
    }
}

Leia dados XMP de imagens HEIC / HEIF em Java

As etapas a seguir lêem metadados XMP de imagens HEIC ou HEIF.

  • Carregue a imagem HEIF ou HEIC usando a classe Metadata.
  • Obtenha o pacote raiz usando o método getRootPackage.
  • A partir do pacote raiz, você pode obter as informações básicas do XMP.
  • Além disso, você pode obter as informações do DCMI Dublin Core.
  • Além disso, você pode obter informações do Photoshop usando o método getPhotoshop.

O código-fonte a seguir mostra como obter informações básicas de XMP, DCMI e Photoshop em Java.

// Extraia dados XMP Básico, DublinCore e Photoshop de imagens heic e heif em Java
Metadata metadata = new Metadata("image.heic");
IXmp root = (IXmp) metadata.getRootPackage();

if (root.getXmpPackage() != null) {
    // XMP Básico    
    if (root.getXmpPackage().getSchemes().getXmpBasic() != null) {
        XmpBasicPackage xmpBasicPackage = root.getXmpPackage().getSchemes().getXmpBasic();
	System.out.println("Creator Tool : " + xmpBasicPackage.getCreatorTool());
	System.out.println("Create Date : " + xmpBasicPackage.getCreateDate());
	System.out.println("Modify Date : " + xmpBasicPackage.getModifyDate());
	System.out.println("Label : " + xmpBasicPackage.getLabel());
	System.out.println("Nick Name: " + xmpBasicPackage.getNickname());
	// ...
    }
    // Informações DublinCore
    if (root.getXmpPackage().getSchemes().getDublinCore() != null) {
	XmpDublinCorePackage xmpDublinCorePackage = root.getXmpPackage().getSchemes().getDublinCore();
	System.out.println("Format : " + xmpDublinCorePackage.getFormat());
	System.out.println("Coverage :" + xmpDublinCorePackage.getCoverage());
	System.out.println("Identifier : " + xmpDublinCorePackage.getIdentifier());
	System.out.println("Source : " + xmpDublinCorePackage.getSource());
	// ...
    }
    // Informações do Photoshop
    if (root.getXmpPackage().getSchemes().getPhotoshop() != null) {
	XmpPhotoshopPackage xmpPhotoshopPackage = root.getXmpPackage().getSchemes().getPhotoshop();
	System.out.println("Color Mode : " + xmpPhotoshopPackage.getColorMode());
	System.out.println("ICC Profile : " + xmpPhotoshopPackage.getIccProfile());
	System.out.println("Country : " + xmpPhotoshopPackage.getCountry());
	System.out.println("City : " + xmpPhotoshopPackage.getCity());
	System.out.println("Date Created : " + xmpPhotoshopPackage.getDateCreated());
	// ...
    }
}

Da mesma forma, existem muitos métodos setter para definir ou atualizar diferentes propriedades XMP. Você pode até fornecer seu próprio par de valores-chave para definir a propriedade do pacote XMP personalizado.

Remover metadados EXIF e XMP de imagens HEIC/HEIF em Java

Você pode simplesmente definir o respectivo pacote EXIF ou pacote XMP como nulo para remover todas as propriedades de metadados.

O código a seguir remove os dados EXIF das imagens HEIC.

try (Metadata metadata = new Metadata("image.heic")) {
	IExif root = (IExif) metadata.getRootPackage();
	root.setExifPackage(null);
	metadata.save("no-exif-image.heic");
}

O código a seguir remove os dados XMP das imagens HEIC.

try (Metadata metadata = new Metadata("image.heic")) {
	IXmp root = (IXmp) metadata.getRootPackage();
	root.setXmpPackage(null);
	metadata.save("no-xmp-image.heic");
}

Conclusão

Resumindo, aprendemos a extrair, atualizar, remover metadados EXIF e XMP das imagens HEIF/HEIC em Java. Além disso, você viu como obter informações IFD e GPS dessas imagens. Agora você pode obter facilmente essas informações e também continuar criando seus próprios aplicativos, como GroupDocs.Metadata App Product Family, para automatizar informações de metadados.

Para obter mais informações, opções e exemplos, você pode visitar o repositório documentation e GitHub. Para mais dúvidas, entre em contato conosco no suporte fórum.

Veja também