Frage

Das System arbeite ich an verfügt über eine Funktion Metadaten von JPEG-Dateien mit dem com.drew.metadata Paket zu extrahieren. http://www.drewnoakes.com/code/exif/ jedoch darauf beschränkt ist JPEG-Dateien, und jetzt ein Kunde gefragt, IPTC von TIF zu extrahieren, und möglicherweise auch anderen Bildformate.

Kennt jemand ähnlichen APIs Drew Noakes ein, das IPTC von TIF extrahieren kann?

Im Idealfall wäre dies ein reiner Java-Ansatz wie der com.drew.metadata ein.

War es hilfreich?

Lösung

Dies ist eine alte Frage. Heutzutage TIFF-Dateien meine metadata-extractor Bibliothek unterstützt sowie JPEG, WebP, PSD, PNG, GIF, BMP, ICO, PCX und viele Kamera-RAW-Formate.

Das Projekt vor kurzem zieht nach GitHub:

https://github.com/drewnoakes/metadata-extractor

Und ist verfügbar über Maven:

http://search.maven.org/#search%7Cga%7C1% 7Cdrewnoakes

Andere Tipps

ich einige Zeit war vor kurzem für die Codierung der Metadaten Manipulation Teil ICAFE Java Bild-Bibliothek und machen es in der Lage Metadatentypen wie EXIF, IPTC, photoshop, ICC_Profile, Thumbnail usw. Einige Funktionen sind besser als andere einzusetzen und zu extrahieren, aber sie alle relativ gut funktionieren. Es gibt eine gemeinsame Schnittstelle für alle Metadaten Lesen unten dargestellt:

import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.Iterator;

import com.icafe4j.image.meta.Metadata;
import com.icafe4j.image.meta.MetadataEntry;
import com.icafe4j.image.meta.MetadataType;
import com.icafe4j.image.meta.iptc.IPTC;

public class ExtractIPTC {

    public static void main(String[] args) throws IOException {
        Map<MetadataType, Metadata> metadataMap = Metadata.readMetadata(args[0]);
        IPTC iptc = (IPTC)metadataMap.get(MetadataType.IPTC);

        if(iptc != null) {
            Iterator<MetadataEntry> iterator = iptc.iterator();

            while(iterator.hasNext()) {
                MetadataEntry item = iterator.next();
                printMetadata(item, "", "     ");
            }
        }   
    }
    private void printMetadata(MetadataEntry entry, String indent, String increment) {
        logger.info(indent + entry.getKey() (StringUtils.isNullOrEmpty(entry.getValue())? "" : ": " + entry.getValue()));
        if(entry.isMetadataEntryGroup()) {
             indent += increment;
             Collection<MetadataEntry> entries = entry.getMetadataEntries();
             for(MetadataEntry e : entries) {
                printMetadata(e, indent, increment);
             }          
        }
    }   
}

Wenn wir das Bild „iptc.tif“ aus dem Verzeichnis „Bilder“ des Projekts als Argument übergeben, werden wir die folgenden Informationen erhalten:

Record number 2: Application Record
Dataset name: Keywords
Dataset tag: 25[0x0019]
Dataset size: 6
Dataset value: Bayern
Record number 2: Application Record
Dataset name: Keywords
Dataset tag: 25[0x0019]
Dataset size: 11
Dataset value: Deckelstein
Record number 2: Application Record
Dataset name: Keywords
Dataset tag: 25[0x0019]
Dataset size: 7
Dataset value: Germany
Record number 2: Application Record
Dataset name: Keywords
Dataset tag: 25[0x0019]
Dataset size: 10
Dataset value: Nittendorf

Der obige Code funktioniert für JPEG und TIFF gleichermaßen. Es erkennt automatisch den Bildtyp und Delegierter Code entspricht, um die Arbeit zu tun.

Hinweis: Es könnte mehr als ein Ort in einer TIFF-Datei sein, die IPTC-Daten enthält. Eine davon ist RichTiffIPTC-Tag, das andere in einem Photoshop-Tag begraben. Derzeit hält ICAFE nur ein IPTC-Daten. Wenn beide Photoshop-Tag mit IPTC-Daten und einem RichTiffIPTC-Tag vorhanden ist, wird es die RichTiffIPTC Daten halten. Andernfalls je nachdem, welcher Tag vorhanden ist, wird es IPTC Daten von diesem Tag halten. Es gibt kein Problem Daten aus beiden Orten zu halten. Die aktuelle Implementierung Karte Abbildung einen Metadatentyp Schlüssel zu einer einzigartigen Metadaten. So hält es nur eine einzige Metadateninstanz.

Update: ICAFE können nun kombinieren IPTC-Daten von beiden RichTiffIPTC und Photoshop IRB und Duplikate entfernen.

Update2: Die Basisklasse aller Metadatentypen in ICAFE - Metadaten implementiert jetzt Iterable Schnittstelle, damit der Benutzer nun durch eine Sammlung von MetadataEntry laufen kann. MetadataEntry selbst erzeugt zusammengesetzte Muster unter Verwendung so eine MetadataEntry eine Sammlung von anderen MetadataEntry enthalten kann. Jede MetadataEntry enthält einen Schlüssel und ein Wert-Paar. Diese Konstruktion ermöglicht eine Baumstruktur Traversal der Metadateneinträge.

Es ist ein gutes Beispiel für die imageio lib mit IPTC hier zugreifen

http: // www .barregren.se / blog / wie-Lese-exif-and-IPTC-java-Bild-io-api

Leider werden Sie noch einen Teil der Arbeit behandeln müssen sich selbst.

Wenn Sie nicht eine reine Java-Implementierung finden sollte, können Sie die Java-Bindungen zu ImageMagick ( JMagick ). Das würde für eine Vielzahl von verschiedenen möglichen Ausgabeformaten ermöglichen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top