質問

Java APIなどを使用してexiftoolの結果を解析することに興味があります。

調べてみましたが、例が見つかりませんでした。たとえば、Java プロジェクトでこれらの結果を取得するにはどうすればよいでしょうか?

ExifTool バージョン番号:8.22

ファイル名 :ExifTool.jpg

ディレクトリ :t/images ファイル

サイズ :24 kB ファイル変更日時

等..私は「ハウツー」かそのようなものを探しています。

役に立ちましたか?

解決

Exifツール (Java 用) Phil Harvey の ExifTool の使いやすく堅牢な Java 抽象化として設計されています。imgscalr プロジェクトの傘下でプロジェクトをしばらく温めた後、先週初めて公開リリースを行ったところです。

このプロジェクトは商用可能な Apache 2 ライセンスの下にあります。

このライブラリに対する私の目標は、(他のほとんどの抽象化レイヤーが行っているように) 呼び出し元から外部プロセス実行コードを抽象化することだけではなく、実際に非常に緊密に統合され、回復力のあるラッパーを設計することです (私が何をしているのかは明確にします)これは、後で説明します)、ExifTool 自体が Java で書かれている場合とまったく同じように、ExifTool クラスのインスタンスを扱うということです。

この初期リリースでは、タグ データの読み取りをサポートしています (将来のリリースでは書き込みが追加される予定です)。これは次のように簡単です。

File image = // path to some image
ExifTool tool = new ExifTool();

Map<Tag, String> valueMap =
    tool.getImageMeta(image, Tag.GPS_LATITUDE, Tag.GPS_LONGITUDE);

System.out.println("Lat: " + valueMap.get(Tag.GPS_LATITUDE) +
    "\tLong: " + valueMap.get(Tag.GPS_LONGITUDE));

新しい「デーモン モード」 (-stay_open True cmd ライン) での ExifTool の使用もサポートされており、そのサポートを有効にすることは、次のように ExifTool インスタンスを作成するのと同じくらい簡単です。

ExifTool tool = new ExifTool(Feature.STAY_OPEN);

に関するドキュメント ExifToolクラスの使い方 設計からパフォーマンス、スレッドの安全性まですべてをカバーする広範な内容です。

Java から簡単に ExifTool を利用することに加えて、このクラスは、実行時の問題を最小限に抑えるため、また、十分に文書化された方法で (予期せぬ例外が発生するのではなく) 発生する可能性のあるすべてのエラーを正しく捕捉して報告するために、かなりの量の予防策を採用しています。コア Java クラスから)。

このクラスは、忙しい Web アプリケーションのような高可用性環境で ExifTool を利用できるように設計されているため、私はこの例外処理とエラー回復について非常に衒学的でした。単に単純な Process オブジェクトをラップして、何かが爆発した場合に手を空中に上げたいだけではありませんでした。私自身 (そしてクラスを使用する他の人) は、エラーを簡単に回復できるように適切に設計された API が必要であることを知っていました。

たとえば、ExifTool をデーモン モードで使用しようとすると、クラスは実際に ExifTool の基になるインストールでその機能がサポートされているかどうかを確認し、サポートされていない場合は問題の回避方法に関する推奨事項を含む UnsupportedFeatureException をスローします。

事前条件のチェックに加えて、クラスの使用 (つまり、デーモン モード) でネイティブ OS プロセスおよびそれらとの通信に使用される入力/出力ストリームが漏洩しないことを保証するために、クラスは自動クリーンアップ スレッドを提供します。後 指定された非アクティブ期間 (デフォルトは 10 分) は、外部プロセスと読み取り/書き込みストリームを正常にシャットダウンし、ExifTool のアイドル状態のインスタンスを軽量にし、再利用のために保持しやすくします。

すべてのリソースは、さらに多くのメタデータを解析するためにクラスへの次の呼び出し時に再初期化されるため、新しいインスタンスを破棄して再作成する必要はありません。また、クリーンアップ スレッドは、設定されたスケジュールではなく、長期間非アクティブな状態が続いた場合にのみ実行されます。間隔を任意に設定することも、クリーンアップ スレッドを完全に停止してクリーンアップを自分で管理することもできます (close() を呼び出すだけです)。

これらの設計はすべて、ExifTool を Java アプリケーションにシームレス、パフォーマンス、簡単に統合するという私の最終目標の一部です。

チェックアウトできます メインプロジェクトページ プロジェクト、使用方法、ソース、ダウンロード リンクなどの詳細については、または、すぐにジャンプすることもできます GitHub 必要に応じてコードを確認してください。

他のヒント

私はexiftool知らないが、私が以前に使用している MediaUtil の読み取りと書き込みのEXIFへJavaでタグ(私は自動化されたJPEG画像の回転のためにそれを使用)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top