Рекомендуемый php-код для чтения рейтинга файла, установленного Adobe Bridge CS3
-
27-09-2019 - |
Вопрос
Предыстория: Я безуспешно пытался прочитать рейтинг, присвоенный в Adobe Bridge CS3, используя creative commons Metadata toolkit для php.Я использую общий хостинг, поэтому у меня нет возможности перекомпилировать php с разными модулями.
Доступен ли php-код, который можно было бы использовать для чтения рейтинга, встроенного в файл .jpg?Я читал, что это раздел в формате xmp (xml) внутри файла.
Решение
Я публикую свое решение здесь на случай, если у кого-то еще возникнет похожая проблема и он прочитает эту тему.Вот что я нашел:
Windows Vista добавьте рейтинг в раздел exif, встроенный в файл
Глинобитный мост добавляет в файл jpg еще один раздел, содержащий данные, отформатированные в формате xml.Структура данных xml + называется файлом xmp.Я еще не обработал файл с помощью Adobe bridge, вот почему я не смог прочитать данные xmp с помощью Metadata toolkit.
Используя Creative Commons - Metadata toolkit, я смог прочитать рейтинги, используя следующий код.Этот код является частью модуля 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($filename); if (strtolower($info['extension'])=="jpg"){ // First try to get the rating from the EXIF data, this is where it is stored by Windows Vista $exif = get_EXIF_JPEG( $photodir . "/" . $filename ); $rating = $exif[0][18246]['Data'][0]; $jpeg_header = get_jpeg_header_data($photodir . "/" . $filename ); // If no rating was found in the EXIF data, it may be in the Adobe format xmp section 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_Tags.php файл в наборе инструментов метаданных путем добавления дополнительной записи в массив тегов EXIF.Я сообщил об этом автору, но я не верю, что он больше поддерживает модуль.Исходный код находится на sourceforge, но я не знаю, как опубликовать патч.Поэтому вам, возможно, потребуется внести изменения в EXIF.php самостоятельно, чтобы заставить код работать.
'EXIF' => array ( // Exif IFD 18246 => array ( 'Name' => "Rating", 'Type' => "Numeric" ),
Другие советы
Теоретически, если вы используете fgets
Вы должны быть в состоянии прочитать это. Было бы полезно, если вы знаете, где этот раздел начинается с точки зрения байтов в файл.