Оглавление

Вступление

Документация к свободной библиотеке exif.obj, для ОС Колибри. Эта библиотека создана для просмотра информации находящейся в изображениях в формате Exif. Информация эта создается цифровыми фотокамерами и содержит разные параметры например такие как: название фирмы производителя, модель камеры, и т.д.

Последнее обновление библиотеки 23.07.14.

Функции

Функции работают с указателями на структуры app1 или на app1_child. Пример структуры:

align 4
h_app1:
	dd 0 ;+0 указатель на количество тегов и на сами теги
	dd 0 ;+4 смещение добавляемое к указателям в тегах
	dw 0 ;+8 параметр, отвечающий за порядок следования байтов
dw 0 ;+10 идентификатор для группы тегов

exif_get_app1

Эта функция ищет начало Exif данных. Если они найдены то заполняется структура app1. Если не найдены, то первый параметр в структуре делается равным 0. Пример:

stdcall [exif_get_app1], [open_file],h_app1
...
h_app1 rb 14

где open_file - указатель на данные файла изображения (пока поддерживаются только *.jpg и *.jpeg).

h_app1 - структура для запоминания начала Exif данных.

exif_get_tag

Заполняет текстовую строку именем параметра из Exif и его значением. Пример:

stdcall [exif_get_tag], h_app1,3,txt_buf,80
...
h_app1  rb 14
txt_buf rb 80

где h_app1 - структура заполенная в exif_get_app1 или в exif_get_child.

3 - порядковый номер параметра.

txt_buf - текстовый буфер для заполнения.

80 - максимальная длина текста.

exif_get_tag_id

Заполняет текстовую строку именем параметра из Exif и его значением. Пример:

stdcall [exif_get_tag_id], h_app1,0x010f,txt_buf,80
...
h_app1  rb 14
txt_buf rb 80

где h_app1 - структура заполенная в exif_get_app1 или в exif_get_child.

0x010f - код тега в котором содержится название производителя камеры.

txt_buf - текстовый буфер для заполнения.

80 - максимальная длина текста.

exif_get_child

Есть простые теги с информацией а есть теги указывающие на списки других тегов. Эта функция берет указатель на начало списка дочерних тегов. Пример:

stdcall [exif_get_child], h_app1,h_child,0x8769
...
h_app1  rb 14
h_child rb 14

где h_app1 - структура заполенная в exif_get_app1 или в exif_get_child.

h_child - структура для заполения данных списка дочерних тегов.

0x8769 - код тега (находящегося в списке тегов h_app1), который является указателем на список других дочерних тегов.

В даном примере функция берет тег 0x8769 и пытается найти его в списке h_app1, если находит то заполняет по нему значения в структуре h_child. Далее к списку h_child можно применять функцию exif_get_tag для взятия значения этих тегов. С помощью этой функции мы как бы переходим внутрь некой "папки" с тегами, которые сразу достать не можем.

exif_get_app2

Эта функция ищет начало данных Exif.app2. Если они найдены то заполняется структура app2. Если не найдены, то первый параметр в структуре делается равным 0. Пример:

stdcall [exif_get_app2], h_app1,h_app2
...
h_app1 rb 14
h_app2 rb 14

где h_app1 - структура c данными Exif.app1, предварительно заполненная функцией exif_get_app1.

h_app2 - структура для запоминания начала данных Exif.app2.

Константы для функции exif_get_child

Здесь приведены некоторые константы, которые могут использоватся как 3-й параметр для функции exif_get_child. Эти константы обозначают специальные теги, которые содержат смещение на дочерние параметры, которые находятся в Exif.

0x8769

Обозначает дополнительные параметры Exif.

0x8825

Обозначает параметры GPS.

Таблица экспорта

Пример таблицы экспорта, расчитанной на использование макроса @use_library:

align 4
import_exif:
	exif_get_app1 dd sz_exif_get_app1
	exif_get_app2 dd sz_exif_get_app2
	exif_get_tag dd sz_exif_get_tag
	exif_get_tag_id dd sz_exif_get_tag_id
	exif_get_child dd sz_exif_get_child
dd 0,0
	sz_exif_get_app1 db 'exif_get_app1',0
	sz_exif_get_app2 db 'exif_get_app2',0
	sz_exif_get_tag db 'exif_get_tag',0
	sz_exif_get_tag_id db 'exif_get_tag_id',0
	sz_exif_get_child db 'exif_get_child',0

История

15.07.14 - первая версия библиотеки, пример использования.

23.07.14 - добавлена функция exif_get_app2.

11.03.16 - добавлена функция exif_get_tag_id, изменены названия некоторых функций (убрано app1 потому что они могут работать не только с app1).