Рекомендуемый php-код для чтения рейтинга файла, установленного Adobe Bridge CS3

StackOverflow https://stackoverflow.com/questions/3042083

Вопрос

Предыстория: Я безуспешно пытался прочитать рейтинг, присвоенный в 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 Вы должны быть в состоянии прочитать это. Было бы полезно, если вы знаете, где этот раздел начинается с точки зрения байтов в файл.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top