exif_read_data
(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)
exif_read_data — Читає заголовки EXIF із файлів зображень
Опис
exif_read_data( resource|string $file, ?string $required_sections = null, bool $as_arrays = false, bool $read_thumbnail = false): array|false
exif_read_data() читає заголовки EXIF із файлів зображень. Таким чином, можна читати метадані, що генеруються цифровими фотоапаратами.
За ідеєю, EXIF-заголовки повинні йти першими в файлах JPEG/TIFF, що генеруються фотоапаратами. Але, на жаль, кожен виробник має своє уявлення про те, як компонувати метадані зображення. Тому будьте готові до ситуації, коли перед Exif-заголовком ще є щось.
Height
иWidth
обчислюються аналогічно до обчислень getimagesize()так що ці параметри не повинні бути присутніми в заголовку . html
- текстовий рядок, що задає висоту/ширину, яку можна використовувати у звичайному HTML.
Якщо Exif-заголовок містить повідомлення про авторські права (Copyright), саме повідомлення може містити два значення. Ця ситуація не описана у стандарті Exif 2.10, тому розділ COMPUTED
міститиме обидва ці значення в полях Copyright.Photographer
иCopyright.Editor
. Водночас розділи IFD0
будуть містити масив байт з NULL-символом як роздільник цих двох значень або тільки перше значення, якщо тип файлу визначено неправильно (нормальна ситуація для Exif). Розділ COMPUTED
буде також містити Copyright
, це може бути або вихідний рядок, або список із власника фотографії та редактора через кому.
ТегUserComment
має ті ж проблеми, що й Copyright. Він може зберігати 2 значення. Перше - використане кодування, друге - саме значення. У цьому випадку розділ IFD
містить або кодування, або масив байт. Розділ COMPUTED
буде зберігати обидва ці значення в полях UserCommentEncoding
иUserComment
СодержимоеUserComment
буде доступно в будь-якому випадку, тому краще використовувати його замість розділу IFD0
Такжеexif_read_data() перевіряє EXIF теги на відповідність специфікації EXIF (» http://exif.org/Exif2-2.PDF, Стор. 20).
Список параметрів
file
Розташування файлу із зображенням. Можливо як шляхом до файлу, і потоковим ресурсом (можна використовувати обгортки).
required_sections
Список розділених комів розділів, які мають бути представлені в результуючому масиві (array). Якщо жоден із розділів знайти не вдасться, функція поверне false
< td>COMPUTED
FILE | FileName, FileSize, FileDateTime, SectionsFound |
html, Width, Height, IsColor та інші. Height та Width обчислюються аналогічно getimagesize(), тому їх не обов'язково включати в заголовок. html - текстовий рядок, що задає висоту/ширину, яку можна використовувати у звичайному HTML. | |
ANY_TAG | Будь-яка інформація укладена в тег, наприклад, IFD0 , EXIF , ... |
IFD0 | Всі дані тега IFD0. У звичайних зображеннях у ньому зберігається розмір зображення. |
THUMBNAIL | Якщо файл містить другий розділ IFD , то вважається, що зображення є ескіз. Вся інформація про ескіз зберігається в цьому розділі. |
COMMENT | Заголовки коментарів JPEG зображень. |
EXIF | Розділ EXIF є підрозділом IFD0 . Він містить більш детальну інформацію про зображення. Більшість його записів залежить від фотоапарата. |
as_arrays
Визначає, чи формувати розділи як масивів. Розділи required_sections
COMPUTED
THUMBNAIL
иCOMMENT
завжди робляться масивами, оскільки можуть містити значення, імена яких конфліктуватимуть з іменами інших розділах.
read_thumbnail
Якщо true
, буде прочитано сам ескіз. Інакше буде прочитана лише інформація у тегах.
Значення, що повертаються
Повертає асоціативний масив (array), у якому ключами будуть імена заголовків, а значеннями – значення, що відповідають цим заголовкам. Якщо жодних даних повернути не можна, exif_read_data() поверне false
Помилки
Помилки рівня E_WARNING
и/илиE_NOTICE
можуть виникати для тегів, що не підтримуються, або інших потенційних умов помилки, але функція все одно намагається прочитати всю зрозумілу інформацію.
список змін
Версия | Опис |
---|---|
8.0.0 | required_sections тепер допускає значення null. |
7.2.0 | Параметрfile перейменований наstream і може приймати як локальний шлях до файлу, і потоковий ресурс. |
7.2.0 | Додано підтримку наступних форматів EXIF: |
- Samsung
- DJI
- Panasonic
- Sony
- Pentax
- Minolta
- Sigma/Foveon
- AGFA
- Kyocera
- Ricoh
- Epson
Приклади
Приклад #1 Приклад використання exif_read_data()****
Loading...
Перший дзвінок завершується невдачею, оскільки в заголовках зображення немає інформації.
Висновок наведеного прикладу буде схожим на:
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.md: 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
Приклад #2 Использованиеexif_read_data()** з потоковим ресурсом (доступно з PHP 7.2.0)**
Loading...
Висновок наведеного прикладу буде схожим на:
EXIF Headers:
Height => 576
Width => 1024
IsColor => 1
ByteOrderMotorola => 0
ApertureFNumber => f/5.6
UserComment =>
UserCommentEncoding => UNDEFINED
Copyright => Denis
Thumbnail.FileType => 2
Thumbnail.MimeType => image/jpeg
Примітки
Зауваження :
Якщо дозволено mbstring, то exif буде намагатися обробляти юнікод і брати кодування як зазначено в exif.decode_unicode_motorola і exif.decode_unicode_intel. Модуль exif не намагатиметься самостійно визначити кодування та вказівка правильного кодування залишається на совісті користувача шляхом встановлення однієї з двох INI-директив перед викликом exif_read_data()
Зауваження :
Якщо параметр
file
використаний для передачі в функцію потоку, цей потік повинен бути перемотується. Зверніть увагу, що файловий позиційний покажчик не буде змінено після завершення роботи цієї функції.
Дивіться також
- exif_thumbnail() - Отримує вбудоване прев'ю зображення
- getimagesize() - Отримання розміру зображення
- Підтримувані протоколи та обгортки