Предлагаемый php-код для чтения рейтинга файлов, установленный Adobe Bridge CS3
Справочная информация. Я пытался прочитать рейтинг, присвоенный в Adobe Bridge CS3, с помощью инструментария Creative Commons Metadata для php, но безуспешно. Я использую виртуальный хостинг, поэтому у меня нет возможности перекомпилировать php с разными модулями.
Доступен ли php-код, который можно использовать для считывания рейтинга, встроенного в файл.jpg? Я прочитал, что это отформатированный раздел xmp (xml) в файле.
2 ответа
Я выкладываю свое решение здесь на тот случай, если у кого-то есть похожая проблема и он прочитает эту ветку. Вот что я нашел:
Windows Vista добавляет оценку в раздел exif, встроенный в файл
Adobe Bridge добавляет еще один раздел в файл jpg, который содержит данные, отформатированные в формате xml. Структура данных xml + называется файлом xmp.Я еще не обработал файл с помощью Adobe Bridge, поэтому я не смог прочитать данные 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= каталог ($photodir); $filenames = scandir($photodir); foreach($filenames как $filename){ $rating = null; $info = pathinfo($filename); if (strtolower($info['extension'])=="jpg"){ // Сначала попытайтесь получить оценку из данных EXIF, здесь они хранятся в Windows Vista $exif = get_EXIF_JPEG( $photodir . "/" . $filename); $rating = $exif[0][18246]['Data'][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][attribute]['xap:Rating']; } } } }
Мне нужно было изменить файл EXIF_Tags.php в наборе метаданных, добавив дополнительную запись в массив тегов EXIF. Я сообщил об этом автору, но я не верю, что он больше поддерживает модуль. Источник находится на sourceforge, но я не знаю, как опубликовать патч. Поэтому вам может потребоваться внести изменения в EXIF.php самостоятельно, чтобы код работал.
'EXIF' => массив ( // Exif IFD 18246 => массив ( 'Name' => "Rating", 'Type' => "Numeric"),
Теоретически, если вы используете fgets
Вы должны быть в состоянии прочитать это. Было бы полезно, если вы знаете, где этот раздел начинается с точки зрения количества байтов в файле.