最近、 icafe 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 が保持する IPTC データは 1 つだけです。IPTC データを持つ Photoshop タグと RichTiffIPTC タグの両方が存在する場合、RichTiffIPTC データが保持されます。それ以外の場合、どのタグが存在しても、そのタグからの IPTC データが保持されます。両方の場所からデータを保持することに問題はありません。メタデータ型のキーを一意のメタデータにマッピングするマップを使用した現在の実装。そのため、一意のメタデータ インスタンスを 1 つだけ保持します。
更新: icafeは、RichTiffIPTC と Photoshop IRB の両方からの IPTC データを結合し、重複を削除できるようになりました。
Update2: ICAFEのすべてのメタデータ型の基本クラス - Metadata は Iterable インターフェイスを実装するようになったため、ユーザーは MetadataEntry のコレクションを反復処理できるようになりました。MetadataEntry 自体は複合パターンを使用して作成されるため、MetadataEntry には他の MetadataEntry のコレクションを含めることができます。各 MetadataEntry には、キーと値のペアが含まれています。この設計により、メタデータ エントリのツリー構造トラバーサルが可能になります。