Question

Arrière-plan: J'ai essayé de lire la note attribuée dans Adobe Bridge CS3 à l'aide de la boîte à outils Creative Commons Metadata pour PHP, sans succès.J'utilise un hébergement mutualisé donc je n'ai pas la possibilité de recompiler php avec différents modules.

Existe-t-il du code php disponible qui pourrait être utilisé pour lire la note intégrée dans le fichier .jpg ?J'ai lu qu'il s'agit d'une section au format xmp (xml) dans le fichier.

Était-ce utile?

La solution

Je poste ma solution ici au cas où quelqu'un d'autre aurait un problème similaire et lirait ce fil.Voici ce que j'ai trouvé :
Windows Vista ajouter la note à la section exif intégrée dans le fichier
Pont Adobe ajoute une autre section au fichier jpg contenant des données formatées en XML.La structure de données xml + est appelée fichier xmp.Je n'avais pas encore traité le fichier avec Adobe Bridge, c'est pourquoi je n'ai pas pu lire les données xmp avec la boîte à outils Metadata.

À l'aide de la boîte à outils Creative Commons - Métadonnées, j'ai pu lire les notes en utilisant le code suivant.Ce code fait partie d'un module Drupal, certaines des variables référencées sont des paramètres Drupal :variable_get() est une fonction Drupal permettant de lire une variable à partir d'un magasin de données persistant.

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'];
        }   
      }
    }
  }

J'ai dû modifier le EXIF_Tags.php dans la boîte à outils de métadonnées en ajoutant une entrée supplémentaire au tableau EXIF ​​Tags.J'ai signalé cela à l'auteur, mais je ne pense pas qu'il maintienne plus le module.La source est sur sourceforge, mais je ne sais pas comment publier un patch.Vous devrez donc peut-être apporter vous-même la modification à EXIF.php pour que le code fonctionne.

'EXIF' => array (

// Exif IFD

18246 => array ( 'Name' => "Rating",
                'Type' => "Numeric" ), 

Autres conseils

En théorie, si vous utilisez fgets vous devriez être en mesure de le lire. Il serait utile si vous savez où cette section commence en termes d'octets dans le fichier.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top