Manual do PHP
Anterior |  | Próxima

# exif_read_data

(PHP 4 >= 4.2.0, PHP 5)

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.

## Descrição

array exif_read_data ( string 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 http://www.canon-asia.com/products/digital_cameras/winxp_problems.html.

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().

Anterior | Principal | Próxima
exif_imagetype | Acima | exif_thumbnail