(PHP 4 >= 4.2.0, PHP 5, PHP 7)
exif_read_data — Lê os cabeçalhos EXIF de imagens JPEG ou TIFF. Deste modo você poderá ler meta dados gerados por camêras digitais.
$filename
[, string $sections
[, bool $arrays
[, bool $thumbnail
]]] )
A função exif_read_data() lê os cabeçalhos
EXIF de um arquivo de imagem JPEG ou TIFF. Retorna uma matriz associativa
aonde os índices são os nomes dos cabeçalhos e os valores são os
valores associados a estes cabeçalhos. Se nenhum dado puder ser retornado,
então o resultado é FALSE
.
filename
é o nome do arquivo a ser lido.
Este não pode ser um URL.
sections
é uma lista das seções separadas por vírgula
que devem estar presentes em um arquivo para produzir a matriz com os resultados.
Se nenhuma das seções não puder ser encontradas, o valor de retorno será FALSE
.
FILE | FileName, FileSize, FileDateTime, SectionsFound |
COMPUTED | html, Width, Height, IsColor e algo mais se disponível. |
ANY_TAG | Qualquer informação que tenha uma Tag ex. IFD0, EXIF, ... |
IFD0 | Todas as informações marcadas de IFD0. Em arquivos de imagens normais isto contém o tamanho e assim por diante. |
THUMBNAIL | Supostamente um arquivo contém uma miniatura de tver um segundo IFD. Toda a informação marcada sobre esta miniatura embutida é guardada nesta seção. |
COMMENT | Cabeçalhos de comentários de imagens JPEG. |
EXIF | A seção EXIF é uma subseção de IFD0. Ela contém informação mais detalhada sobre uma imagem. A maioria destas é relacionada a camêras digitais. |
arrays
especifica quando cada seção se torna ou não uma
matriz. As seções COMPUTED,
THUMBNAIL e COMMENT sempre
se tornam matrizes já que podem conter valores os quais os nomes conflitem
com outras seções.
thumbnail
quando ler ou não a miniatura em sí
ou apenas os dados marcados.
Nota:
Cabeçalhos Exif tendem a estar presentes em imagens JPEG/TIFF geradas por camêras digitais, mas infelizmente, cada fabricante de camêra digital tem uma idéia diferente de como marcar as suas imagens, então você não pode confiar em um cabeçalho EXIF especifico estar presente.
Windows ME/XP podem limpar os cabeçalhos Exif quando estiverem conectados a uma camêra. Maiores informações estão disponíveis em [broken link].
Exemplo #1 Exemplo exif_read_data()
<?php
echo "test1.jpg:<br />\n";
$exif = exif_read_data('tests/test1.jpg', 'IFD0');
echo $exif===false ? "No header data found.<br />\n" : "Image contains headers<br />";
$exif = exif_read_data('tests/test2.jpg', 0, true);
echo "test2.jpg:<br />\n";
foreach ($exif as $key => $section) {
foreach ($section as $name => $val) {
echo "$key.$name: $val<br />\n";
}
}
?>
A primeira chamada falha porque a imagem não tem informações no cabeçalho.
test1.jpg: No header data found. test2.jpg: FILE.FileName: test2.jpg FILE.FileDateTime: 1017666176 FILE.FileSize: 1240 FILE.FileType: 2 FILE.SectionsFound: ANY_TAG, IFD0, THUMBNAIL, COMMENT COMPUTED.html: width="1" height="1" COMPUTED.Height: 1 COMPUTED.Width: 1 COMPUTED.IsColor: 1 COMPUTED.ByteOrderMotorola: 1 COMPUTED.UserComment: Exif test image. COMPUTED.UserCommentEncoding: ASCII COMPUTED.Copyright: Photo (c) M.Boerger, Edited by M.Boerger. COMPUTED.Copyright.Photographer: Photo (c) M.Boerger COMPUTED.Copyright.Editor: Edited by M.Boerger. IFD0.Copyright: Photo (c) M.Boerger IFD0.UserComment: ASCII THUMBNAIL.JPEGInterchangeFormat: 134 THUMBNAIL.JPEGInterchangeFormatLength: 523 COMMENT.0: Comment #1. COMMENT.1: Comment #2. COMMENT.2: Comment #3end THUMBNAIL.JPEGInterchangeFormat: 134 THUMBNAIL.Thumbnail.Height: 1 THUMBNAIL.Thumbnail.Height: 1
Nota:
Se a imagem conter qualquer dado IFDO então COMPUTED contém a entrada ByteOrderMotorola a qual é 0 para little-endian (intel) e 1 para big-endian (motorola), relativo a ordem dos byte. Isto foi adicionado no PHP 4.3.
Quando um cabeçalho Exif contém uma nota de Copyright pode conter dois valores. Como a solução é inconsistente no padrão Exif 2.10 a seção COMPUTED irá retornar ambas as entradas Copyright.Photographer e Copyright.Editor enquando as seções IFD0 contém uma matriz de byte onde o caractere NULL separa as duas entradas. Ou apenas a primeira entrada se o tipo de dados estiver errado (funcionamento normal do Exif). O COMPUTED irá conter também uma entrada Copyright a qual será a string original do copyright ou uma lista separada por vírgula da foto e do copyright do editor.
Nota:
A tag UserComment tem o mesmo problema que a tag de Copyright. Ela pode guardar dois valores, primeiro a codificação usada e em segundo o valor em sí. Então a seção IFD contém somente a codificação ou uma matriz de byte. A seção COMPUTED irá guardar ambos nas entradas UserCommentEncoding e UserComment. A entrada UserComment esta disponível em ambos os casos então deve ser usada em preferencia ao valor da seção IFD0.
Se o comentário do usuário usar Unicode ou codificação JIS e o módulo mbstring estiver disponível esta codificação será automaticamente modificada de acordo com a definição do exif que estiver no php.ini. Isto foi adicionado no PHP 4.3.
Nota:
Height e Width(altura e largura) são compudados da mesma maneira que getimagesize() faz, então seus valores não devem ser parte de nenhum cabeçalhor retornado. Também html é uma height/width de textopara ser usado dentro de um HTML normal.
Nota:
A partir do PHP 4.3 a função pode ler dodos os dados IFD embutidos, incluindo matrizes (retornadas assim). Também o tamanho da miniatura embutida retornada na submatriz THUMBNAIL e a função exif_read_data() pode retornar miniaturas no formato TIFF. Último, mas não menos importante, não existe limite de tamanho para os valores retornados (não enquanto o limite de memória não é atingido).
Nota: Esta função esta disponível apenas no PHP 4 compilado usando --enable-exif . Sua funcionalidade e comportamento mudou no PHP 4.2. Versões anteriores são muito instaveis. A partir do PHP 4.3 comentários do usuário podem mudar a codificação automaticamente se o PHP 4 foi compilado usando --enable-mbstring . Esta função não requer a biblioteca de imagem GD. Veja também exif_thumbnail() e getimagesize().