質問

私が取り組んでいるシステムには、JPEG ファイルからメタデータを抽出する機能があります。 com.drew.metadata パッケージ。 http://www.drewnoakes.com/code/exif/ ただし、これは JPEG ファイルに限定されており、お客様から TIF やおそらく他の画像形式から IPTC を抽出することについて問い合わせがありました。

TIF から IPTC を抽出できる、Drew Noakes の API と同様の API について知っている人はいますか?

理想的には、これは次のような純粋な Java アプローチになります。 com.drew.metadata 1つ。

役に立ちましたか?

解決

この古い質問です。今日で私のmetadata-extractorライブラリは、同様にJPEG、WEBP、PSD、PNG、GIF、BMP、ICO、PCX、多くのCamera Raw形式として、TIFFファイルをサポートしています。

最近のGitHubに移動し、プロジェクトます:

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

とMavenを経由して提供されています:

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

他のヒント

最近、メタデータ操作部分のコーディングに時間を費やしました。 アイカフェ Java 画像ライブラリを使用して、EXIF、IPTC、PHOTOSHOP、ICC_Profile、サムネイルなどのメタデータ タイプを挿入および抽出できるようにします。一部の機能は他の機能よりも優れていますが、どれも比較的正常に動作します。以下に示すすべてのメタデータ読み取り用の共通インターフェイスがあります。

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);
             }          
        }
    }   
}

プロジェクトの「images」ディレクトリからのイメージ「iptc.tif」を引数として渡すと、次の情報が得られます。

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

上記のコードは、JPEG と TIFF の両方で同様に機能します。画像の種類を自動的に検出し、対応するコードに作業を委任します。

注記:IPTC データを含む TIFF ファイル内に複数の場所が存在する可能性があります。1 つは RichTiffIPTC タグで、もう 1 つは Photoshop タグ内に埋め込まれています。現在、icafe は 1 つの IPTC データのみを保持します。IPTC データを含む Photoshop タグと RichTiffIPTC タグの両方が存在する場合、RichTiffIPTC データが保持されます。それ以外の場合は、どのタグが存在しても、そのタグからの IPTC データが保持されます。両方の場所からデータを保持しても問題ありません。現在の実装では、メタデータ タイプのキーを一意のメタデータにマッピングするマップを使用しています。したがって、一意のメタデータ インスタンスを 1 つだけ保持します。

アップデート: アイカフェ RichTiffIPTC と Photoshop IRB の両方からの IPTC データを結合し、重複を削除できるようになりました。

アップデート2: ICAFE のすべてのメタデータ タイプの基本クラス - Metadata は Iterable インターフェイスを実装するようになり、ユーザーは MetadataEntry のコレクションを反復処理できるようになりました。MetadataEntry 自体は複合パターンを使用して作成されるため、MetadataEntry には他の MetadataEntry のコレクションを含めることができます。各 MetadataEntry にはキーと値のペアが含まれます。この設計により、メタデータ エントリのツリー構造の横断が可能になります。

ここ

IPTCにアクセスするためにimageio libにを使用してのここで良い例があります

のhttp:// WWW .barregren.se /ブログ/どのように読み-EXIF-と-IPTC-javaの-画像-IO-API

残念ながら、あなたはまだ仕事を自分の一部を処理する必要があります。

あなたは純粋なJavaの実装を見つけることができない場合は、ImageMagickのにJavaバインディング( JMagick <を使用して検討することもでき/ A>)。これは、異なる可能な出力形式の過多が可能になる。

scroll top