Pergunta

Fundo: Tenho tentado ler a classificação atribuída no Adobe Bridge CS3 usando o kit de ferramentas Creative Commons Metadata para php, sem sucesso.Estou usando hospedagem compartilhada, então não tenho oportunidade de recompilar o php com módulos diferentes.

O código php está disponível para ser usado para ler a classificação incorporada no arquivo .jpg?Eu li que esta é uma seção formatada em xmp (xml) dentro do arquivo.

Foi útil?

Solução

Estou postando minha solução aqui caso alguém tenha um problema semelhante e leia este tópico.Aqui está o que encontrei:
Windows Vista adicione a classificação à seção exif incorporada no arquivo
Ponte Adobe adiciona outra seção ao arquivo jpg que contém dados formatados em xml.A estrutura de dados xml + é chamada de arquivo xmp.Ainda não havia processado o arquivo com o Adobe Bridge, por isso não consegui ler os dados xmp com o kit de ferramentas de metadados.

Usando o kit de ferramentas Creative Commons - Metadata, consegui ler as classificações usando o código a seguir.Este código faz parte de um módulo Drupal, algumas das variáveis ​​​​referenciadas são configurações do Drupal:variable_get() é uma função Drupal para ler uma variável de um armazenamento de dados persistente.

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

Eu precisei modificar o EXIF_Tags.php arquivo no kit de ferramentas de metadados adicionando uma entrada adicional à matriz de tags EXIF.Relatei isso ao autor, mas não acredito que ele esteja mais mantendo o módulo.A fonte está no sourceforge, mas não sei como postar um patch.Portanto, você mesmo pode precisar fazer a alteração em EXIF.php para fazer o código funcionar.

'EXIF' => array (

// Exif IFD

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

Outras dicas

Teoricamente se você usar fgets Você deve ser capaz de lê -lo. Seria útil se você soubesse onde esta seção começa em termos de bytes no arquivo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top