1

次の問題があります。

私は新しく継承されたプロジェクトでメンテナンスを行っています。このプロジェクトでは、開発者は次の方法で画像とビデオのメタデータを処理します。

function getRotationFromFile($realPath) {
    $retVal = Array();

    $cmd = variable_get("exiftool",null) . "\"$realPath\"" . " | grep -E 'Rotation|Camera Identifier'";
    exec($cmd, $output);

    foreach ($output as $row){
        $key = trim(strstr($row, ':', true));
        $value = trim(str_replace(": ", "", strstr($row, ': ')));
        $retVal[$key] = $value;
    }
    return $retVal;
}

ご覧のとおり、この関数はexec(exiftool..)を呼び出し、いくつかのメタデータを取得します。私はphpにexif_read_dataが存在することを知っています。それは同じことをしました。

私の質問は次のとおりです。

  1. 最善の解決策は何ですか?
  2. 速いのは誰ですか?
  3. より「正しい」のは誰ですか?
  4. 最後に、検索しようとしましたが、exif_read_dataがソースでexiftoolを使用しているかどうかわかりませ

前もって感謝します!

4

3 に答える 3

4

exiftool を介して非常に高速に読み書きできる PHP スクリプトを作成しました。バックグラウンド サービスとして実行されるように gearman と一緒に使用します。exiftool の最も遅い部分がそれを開始し、ジョブを gearman に渡して PHP スクリプトから呼び出します。このスクリプトの約 5 つのインスタンスを実行するため、迅速にサービスを提供できます。1 つのプロセスは、約 1 ~ 2 秒で約 100 個のファイルを処理できるはずです。これはもちろん、ファイルのサイズとストレージの速度によって異なりますが、適切にスケーリングされます。これは、過去 5 か月間、デジタル アセット管理プラットフォームの本番環境で使用されています。

https://github.com/tsmgeek/ExifTool_PHP_Stayopen

于 2014-03-17T15:25:11.933 に答える
1

私の知る限り、exif_read_data は EXIF データのみを読み取り、他の種類のメタデータは読み取らず、Tiff および Jpg ファイルに限定されます。EXIF チャンクが動画ファイルに現れることはめったにありません。さらに、そのコードで探している 2 つのタグは、タグCamera IdentifierRotationはなく、EXIF 仕様の一部です。 Camera Identifierは Quicktime タグのRotationようですが、Nikon および Canon makernotes タグのようです。

実行できることの 1 つは、Exiftool に grep を介してパイプするのではなく、必要なタグのみを表示するように指示することです。-CameraIdentifier -Rotationこれは、コマンド ラインに追加することで実行できます。quiet オプション-qもこれに役立つ場合があります。

Orientationまた、画像ファイルの向きを保持するための標準タグであるため 、タグを調べることもできます。

@tsmgeek は、起動時のオーバーヘッドについて正しいため、おそらく最良の解決策を持っています。

于 2016-09-26T22:33:28.593 に答える
0

PHP 関数exif_read_dataは、JPEG および TIFF ファイル タイプのみをサポートします。コマンド ライン ユーティリティexiftool- はるかに。

于 2016-09-26T10:20:22.047 に答える