|
(PHP 4 >= 4.2.0) exif_read_data - читает шапки EXIF из JPEG или TIFF.
Описаниеarray exif_read_data (string filename [, string sections [, bool arrays [, bool thumbnail]]])
Функция exif_read_data() читает шапки/headers
EXIF из файла изображения JPEG или TIFF. Она возвращает ассоциативный
массив, где индексами являются header-имена, а значениями - значения,
ассоциированные с этими headers. Если никакие данные не могут быть возвращены,
возвращается FALSE. filename это имя читаемого файла. Это не может быть url.
sections разделённый запятыми список разделов, который должен присутствовать в файле,
чтобы производить результирующий массив. FILE |
FileName, FileSize, FileDateTime, SectionsFound | COMPUTED |
html, Width, Height, IsColor и ещё что-нибудь, если доступно. | ANY_TAG |
Любая информация, имеющая тэг, например, IFD0, EXIF, ... | IFD0 |
Все данные с тэгами IFD0. В нормальных файлах изображений содержит размер изображения и т.д. |
THUMBNAIL | Файл, содержащий уменьшенную версию изображения/thumbnail, если имеется второй IFD.
Вся тэговая информация о внедрённом thumbnail хранится в этом разделе. | COMMENT |
Шапки комментария JPEG-изображений. | EXIF | Раздел EXIF это подраздел IFD0. Он содержит более детализированную информацию
об изображении. Большинство этих вхождений относятся к цифровой камере. |
arrays специфицирует, становится или нет каждый раздел массивом. Разделы FILE,
COMPUTED и THUMBNAIL всегда становятся массивами, мак как они могут содержать значения, имена
которых конфликтуют с другими разделами. thumbnail читать или нет само thumbnail, а не только тэгированные данные.
Примечание: делается попытка представить шапки еxif в JPEG/TIFF-изображениях,
генерируемых цифровыми камерами, но, к сожалению, каждая цифровая камера по
своему тэгирует свои изображения, поэтому вы не всегда можете полагаться на
специфические шапки Exif.
Пример 1. 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";
}
}?> |
Первый вызов терпит неудачу, поскольку изображение не имеет header-информации.
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.htm: 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 | |
Примечание:
если изображение содержит IFD0-данные, то COMPUTED содержит вхождение
ByteOrderMotorola, которое равно 0 для байтового порядка little-endian (intel)
и 1 - для big-endian (motorola). Это было введено в PHP 4.3.
Если Exif header содержит Copyright note, они сами содержат два значения.
В качестве разрешения несоответствия стандарту Exif 2.10, раздел COMPUTED возвращает и Copyright.Photographer,
и Copyright.Editor, в то время как раздел IFD0 содержит байтовый массив с символом NULL, который
разделяет оба вхождения. Либо только первое вхождение, если тип данных
имеет неправильный формат (нормальное поведение Exif).
COMPUTED будет также содержать вхождение Copyright, которое будет либо оригинальной copyright-строкой, либо списком разделённых
запятыми photo и editor copyright.
Примечание:
с тэгом UserComment существует та же проблема, что и с тэгом Copyright. Он
может хранить два значения: первое - для используемой кодировки, а второе -
само значение. То есть раздел IFD содержит только кодировку или массив байтов. Раздел COMPUTED будет
хранить вхождения UserCommentEncoding и UserComment. Вхождение UserComment доступно в обоих вариантах, поэтому предпочтительнее использовать его, а не
значение в разделе IFD0. Если пользовательский комментарий использует кодировку Unicode или JIS, а
модуль mbstring доступен, эта кодировка автоматически изменяется в
соответствии с установками exif ini. Это было введено в PHP 4.3.
Примечание: Height и Width вычисляются тем же способом, что и в
getimagesize(), поэтому их значения обязаны не быть частью любого из возвращаемых header.
Также html это текстовая строка height/width, используемая внутри нормального HTML.
Примечание: начиная с PHP 4.3, эта функция может читать все внедрённые IFD-данные, включая
массивы (возвращаемые как таковые). Также и размер внедрённого thumbnail возвращается в подмассиве
THUMBNAIL, и функцияexif_read_data() может возвращать thumbnails в формате
TIFF. И, наконец, теперь нет ограничения на максимальный размер возвращаемых
значений (если не достигнут предельный размер доступной памяти).
Примечание: эта функция доступна только в PHP 4, скомпилированном с опцией
--enable-exif. Её функциональность и поведение изменилось в PHP 4.2. Предыдущие версии
очень нестабильны. Начиная с PHP 4.3, пользовательский комментарий может автоматически
изменить кодировку, если PHP 4 был скомпилирован с опцией --enable-mbstring.
Эта функция не требует библиотеки GD image. См. также
exif_thumbnail() и getimagesize().
| |