Código php sugerido para ler a classificação de arquivo definida pelo Adobe Bridge CS3
-
27-09-2019 - |
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.
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.