背景: PHP用のクリエイティブコモンズメタデータツールキットを使用して、AdobeBridgeCS3で割り当てられた評価を読み込もうとしましたが成功しませんでした。私は共有ホスティングを使用しているので、異なるモジュールでphpを再コンパイルする機会がありません。
.jpgファイルに埋め込まれている評価を読み取るために使用できるphpコードはありますか?これはファイル内のxmp(xml)形式のセクションであることを読みました。
背景: PHP用のクリエイティブコモンズメタデータツールキットを使用して、AdobeBridgeCS3で割り当てられた評価を読み込もうとしましたが成功しませんでした。私は共有ホスティングを使用しているので、異なるモジュールでphpを再コンパイルする機会がありません。
.jpgファイルに埋め込まれている評価を読み取るために使用できるphpコードはありますか?これはファイル内のxmp(xml)形式のセクションであることを読みました。
他の誰かが同様の問題を抱えていて、このスレッドを読んだ場合に備えて、ここに私の解決策を投稿しています。私が見つけたものは次のとおりです。
Windows Vistaは、ファイルに埋め込まれた exif セクションに評価を追加します。 Adobe
Bridgeは、xml でフォーマットされたデータを含む jpg ファイルに別のセクションを追加します。xml + データ構造は xmp ファイルと呼ばれます。
Adobe bridge でファイルをまだ処理していないため、Metadata ツールキットで xmp データを読み取ることができませんでした。
Creative Commons - Metadata ツールキットを使用して、次のコードを使用して評価を読み取ることができました。このコードは Drupal モジュールの一部であり、参照される変数の一部は Drupal 設定です。 variable_get() は、永続的なデータ ストアから変数を読み取る Drupal 関数です。
include_once("PHP_JPEG_Metadata_Toolkit_1.11/JPEG.php");
include_once("PHP_JPEG_Metadata_Toolkit_1.11/Photoshop_File_Info.php");
include_once("PHP_JPEG_Metadata_Toolkit_1.11/EXIF.php");
include_once("PHP_JPEG_Metadata_Toolkit_1.11/XMP.php");
$photodir = variable_get('rotate_images_sourcefiles_dir',"sites/default/files/imageNodes");
$rating_threshold = variable_get('rotate_images_rating_threshold',3);
$allImages=dir($photodir);
$filenames = scandir($photodir);
foreach($filenames as $filename){
$rating = null;
$info = pathinfo($ファイル名);
if (strtolower($info['extension'])=="jpg"){
// まず、EXIF データから評価を取得しようとします。これは、Windows Vista によって格納されている場所です
$exif = get_EXIF_JPEG( $photodir . "/" . $filename );
$rating = $exif[0][18246]['データ'][0];
$jpeg_header = get_jpeg_header_data($photodir . "/" . $filename );
// EXIF データにレーティングが見つからない場合は、Adobe 形式の xmp セクションにある可能性があります
if ($rating == null){
if($jpeg_header != false){
$xmp = get_XMP_text($jpeg_header);
$xmpArray = read_XMP_array_from_text($xmp);
$rating = $xmpArray[0]['children'][0]['children'][0][attributes]['xap:Rating'];
}
}
}
}
EXIF タグ配列にエントリを追加して、メタデータ ツールキットのEXIF_Tags.phpファイルを変更する必要がありました。私はこれを作者に報告しましたが、彼がもはやモジュールを保守しているとは思えません。ソースは sourceforge にありますが、パッチを投稿する方法がわかりません。そのため、コードを機能させるには、EXIF.php を自分で変更する必要がある場合があります。
'EXIF' => 配列 (
// Exif IFD
18246 => 配列 ( '名前' => "評価",
'タイプ' => "数値" ),
理論上は使えばfgets読めるはずです。このセクションがファイルのバイト単位でどこから始まるかを知っていると役立ちます。