Правка exif. ExifTool: читаем и редактируем метаданные файлов. Манипуляции с датой и временем

Чтобы описать каждую точку цифрового изображения пиксель - picture element (элемент картинки, дословно) нужно задать несколько чисел. В случае растрового RGB 8 бит представления, каждый пиксель характеризуется тремя компьютерными 8 битными словами для каждого из каналов. В мегапиксельном изображении таких слов 3 миллиона. Поэтому графические файлы в растровом формате так велики. Записать попутно тысячу слов не составит труда и не потребуется никаких дополнительных затрат. Но эти «неграфические» слова - метаданные позволяют:
a) согласовать цвета и яркости воспринимаемые камерой или сканером с яркостью или цветами на дисплее компьютера,
б) знать съемочные настройки камеры для файла-изображения (избавится от бумажных блокнотов и диктофонов, хранящих памятные заметки),
в) подтвердить ваше авторское право,
г) найти нужное изображение в базе данных по ключевому слову или даже географической координате места съемки,
д) автоматически преобразовать файл в требуемый для вывода формат и корректно напечатать изображение в автоматическом режиме (в том числе без компьютера),
и еще много чего.DCF

Design Rule for Camera File System (описание в ) - индустриальный стандарт организации данных в устройствах получения, хранения, преобразования и вывода цифровых изображений. Принят в 1998 году (Japan Electronics Industry Development Association) для стандартизации процесса переноса данных между различными устройствами. Сейчас входит в (Japan Electronics and Information Technology Industries Association).

Правилам DCF подчиняется структура файлов на карте памяти цифрового аппарата. В привычном представлении это дерево папок с файлами и отдельными файлами. Изображения, обычно, хранятся во вложенных папках директории DCIM. В других хранятся видео и звуковые файлы, «системные» данные настроек камеры, шаблоны создания HTML галерей. Задания печати DPOF (папка MISC) позволяют принтеру прямой печати самостоятельно найти и выполнить задание печати.

Программное обеспечение, которым комплектуется камера, используя DCF информацию, автоматически копирует снимки с карты памяти на компьютер в базу данных, строит панорамы, открывает приложения для преобразования RAW файлов и выполняет многое другое, на что только хватило фантазии разработчиков.

Стандарт DCF включает так же и описание формата собственно графических файлов JPEG, TIFF, RAW. Графические файлы, в свою очередь, подчиняются правилам организаций и ассоциаций, утвердивших их. Стандарт EXIF входит в спецификацию DCF.

Структура данных на карте памяти камеры Epson L-500V

Для корректной работы различных устройств с мультимедийными файлами (звук, изображения) был принят стандарт универсальных заголовков файлов EXIF. EXIF - Exchangeble image format (версия 1.0 была опубликована в 1995 год). Формат предусматривает хранение в одном файле данных изображения или музыки, их уменьшенных копий (для JPEG рекомендуется 160×120), подраздела текстового описания данных.

Современная версия стандарта - Exif 2.2 (описание в ). Она включает так же технологию автоматического управления цветом и обработки изображения в соответствие с сюжетными съемочными настройками для вывода на печать или дисплей (версия 2.0 предполагала кодирование цвета в sRGB пространстве, в версии 2.2 цветовое пространство может быть любым).

Текстовая часть раздела Exif файла состоит из маркеров и тегов, описывающих определенный параметр (идентификатор и соответствующее ему имя параметра) и значение этого параметра (значение в определенном формате представления величины в виде ASCII кода, рационального, десятичного, шестнадцатеричного и т. д. числа). Набор тегов содержит более-менее стандартизованную и обязательную часть и разделы, «отданные» производителям техники и программного обеспечения для их специальных целей. Программное обеспечение, предназначенное для чтения EXIF данных, ставит в соответствие тегам их определения, а значениям - значения. При этом создатели не всегда придерживаются спецификации и потому случаются недоразумения. Так определение информационного поля может быть заменено соответствующим ему общепринятым эквивалентом, а значение не преобразовано в соответствующий формат. Или производитель камеры записывает в поле, соответствующее тегу, информацию в некорректном формате или вообще о другом параметре. Если это узкоспециализированная программа под определенную марку камер, то недоразумений обычно не бывает. Пользователь «обязан своей покупкой» подчиняться описанным в руководстве ПО правилам и, изучив свой аппарат и программу, будет понимать, о чем идет речь. Но если это универсальная программа, то путаница с неправильным наименованием тегов и форматированием, соответствующих им величин, случается не редко. Это неизбежная плата за универсальность. И еще за привычный язык, ведь по правилам EXIF языка, значения параметров всего лишь числа (например, дюйм - «1», см -«2»), а программа переводит их в понятные нам слова (что необязательно, например в виде чисел представлены некоторые параметры в Adobe Photoshop, Info раздел «Advanced EXIF»).

Рассмотрим информационную часть графического файла на примере цифрового снимка и программы чтения EXIF заголовков. Далее в таблице представлены основные теги формата EXIF на примере Canon EOS 300D и приложения В таблице так же приведены некоторые не отображаемые приложением теги, но о них полезно знать. Кроме ExifRead заголовки отображают и другие программы: , .

Тег Описание Пример JPEG Canon 300D по ExifRead
Filename имя файла IMG_2614.JPG
Application
Marker
маркер, необходимый для корректного согласования пользовательских приложений с форматом записи служебной информации,
маркер APP1 указывает на блок информации JPEG EXIF, APP0 - JFIF (JPEG File Interchange Format) стандарт, APP2 - FlashPix
JFIF_APP1: Exif
Make производитель камеры Canon
Model модель камеры Canon EOS 300D DIGITAL
Orientation ориентация камеры при съемке, положение угла кадра с координатой 0,0 left-hand side
XResolution разрешение вывода (печати), точек на дюйм по Х координате 180/1
YResolution разрешение вывода (печати), точек на дюйм по У координате 180/1
Resolution
Unit
единица длины, на которую приведено разрешение вывода, «1» дюймы, «2» сантиметры Inch
DateTime дата последнего изменения изображения 2004:07:13 11:57:35
YCbCr
Positioning
положение точки, определяющей цвет в ячейке YСbCr данных Centered
ExifOffset сдвиг, положение Image file directory - блока изображения в файле 196
Exposure
Time
выдержка 1/400 seconds
FNumber число диафрагмы 11,0
ISO
SpeedRatings
эквивалентная светочувствительности 200
ExifVersion версия формата Exif 0221
DateTime
Original
время съемки 2004:07:13 11:57:35
DateTime
Digitized
время создания цифрового файла 2004:07:13 11:57:35
Components
Configuration
формат представления данных в файле изображения YCbCr
Compressed
BitsPerPixel
средняя степень компрессии JPEG 3/1 (bits/pixel)
Shutter
SpeedValue
величина выдержки в представлении APEX 1/400 seconds,
корректный вид в APEX «8,6» (1/2 8,6)
ApertureValue величина апертуры в представлении APEX F 11,0,
корректный вид в APEX «7» (2 7/2)
Exposure
BiasValue
компенсация экспозиции в единицах EV (APEX) EV0,0
Max
ApertureValue
максимальная апертура объектива в представлении APEX F 5,00,
корректный вид в APEX «4,6» (2 (4,6)/2)
Metering
Mode
тип экспозамера,«0» не определено, «1» усредненный, «2» центрально-взвешенный, «3» точечный, «4» мультиточечный, «5» мультисегментный, «6» частичный, «255» другие. Division
Flash вспышка Not fired
FocalLength фокусное расстояние объектива на камере 125,00(mm)
UserComment комментарии пользователя к файлу, если камера позволяет их задать
FlashPixVersion совместимость с форматом представления данных FlashPix - стандарта International Imaging Industry Association - I3A 0100 - совместимость с FlashPix format Ver.1.0
ColorSpace цветовое пространство файла, DCF предполагает sRGB, которому соответствует значение маркера «1», иному пространству - «65535» (некалиброванное) sRGB
ExifImage
Width
ширина изображения, пикселей 2048
ExifImage
Height
высота изображения, пикселей 3072
Interoperability
Offset
параметр, определяющий положение Image file directory - блока изображения в файле 2366
FocalPlane
XResolution
плотность сенсоров на матрице по Х координате 2048000/595,
или 3442 на дюйм,
позволяет определить размер сенсора по Х - 25,4х2048/3442 = 15,11 мм
или
25,4х595/1000 = 15,11 мм
FocalPlane
YResolution
плотность сенсоров на матрице по Y координате 3072000/892,
или 3443/дюйм
размер сенсора
25,4х3072/3443 = 22,66 мм
FocalPlane
ResolutionUnit
единица измерения для плотности сенсоров, «1» не определено, «2» дюйм, «3» сантиметр Meter, ошибка
корректное значение Inch выдает приложение IrfanView
Sensing
Method
тип сенсора One-chip color area sensor - одиночный сенсор с цветной матрицей фильтров
FileSource источник изображения DSC - Digital still camera
Custom
Rendered
обработка изображения Normal process
Exposure
Mode
режим экспоавтоматики Auto
Scene
CaptureType
сюжетная программа Standard
Maker Note (Vendor) раздел дополнительных параметров (параметры, приведенные далее), для разработчика, его положение Canon Format: 1408Bytes (Offset:942)
Macro mode макрорежим при съемке Off
Self timer таймер при съемке Off
Quality JPEG сжатие Fine
Flash mode режим вспышки Off
Sequence
mode
режим смены кадров Single-frame
Focus mode алгоритм фокусировки One-Shot
Image size размер изображения Large
Easy shooting mode программный режим Manual
Digital zoom цифровой зум
Contrast параметры обработки изображения, контраст High , +1
Saturation параметры обработки изображения, насыщенность High , +1
Sharpness параметры обработки изображения, резкость High , +1
ISO Value светочувствительность 100
Metering
mode
тип экспозамера Evaluative
Focus type тип фокусировки Unknown
AF point selected точка фокусировки Unknown (8197)
Exposure
mode
экспозиционный режим Aperture Priority
Focal length объектив на камере 100-300 mm
Flash activity вспышка Off
Sequence
number
кадр в серии снимков 0
White
Balance
замер баланса белого Auto
Flash bias экспокоррекция вспышки в EV (APEX) 0 EV
Firmware
Version
версия прошивки камеры Firmware Version 1.1.1
Camera Serial Number (Irfan)
Serial number (EXIF Reader)
серийный номер камеры 1070439357 (Irfan)
3FCD-39869 (EXIF Reader)
Image
Number
номер снимка, снятого камерой,
первые три цифры - номер папки, последние четыре - порядковый номер файла
2262614
Owner
Name
имя пользователя камеры, если персонифицирована SergeySherbakov
Color temp цветовая температура 5200K
WhitePoint определение точки белого изображения,
если используется CIE стандарт D65 - величина «3127/10000,3290/10000»
Parameters Параметры JPEG Standard
YCbCr
Coefficients
для YCbCr представления коэффициенты преобразования в RGB format
обычно «0.299/0.587/0.114»
Reference BlackWhite определение точки черного/белого
для YCbCr
величины задают черную/белую точку для Y, Cb, Cr и каналов RGB
Copyright копирайт «Автор»
для EXIF, заполнено в ACDSee
Artist автор «Автор»
заполнено в ACDSee
ImageDescription
описание снимка «EXIF теги Иллюстрация» заполнено в ACDSee
Thumbnail Information
Compression
JPEGInterchangeFormat
JPEGInterchangeFormatLength
информация об уменьшенной копии изображения в EXIF заголовке OLDJPEG
2211
6492
Components Configuration формат кодирования данных характеристик пикселя
RGB «0x04,0x05,0x06,0x00»,
YCbCr «0x01,0x02,0x03,0x00»
для справки:
0x01:Y, 0x02:Cb, 0x03:Cr,
0x04:Red, 0x05:Green, 0x06:Blue
Brightness
Value
яркость сюжета в APEX,
для вычисления Exposure (Ev) к BrigtnessValue (Bv) нужно добавить величину SensitivityValue (Sv)
для справки:
Ev=Bv+Sv Sv=log 2 (ISOSpeedRating / 3,125)
ISO100:Sv=5, ISO200:Sv=6, ISO400:Sv=7
Subject
Distance
дистанция фокусировки, м
Light
Source
источник света, установка баланса белого,
«0» не задано, «1» daylight, «2» fluorescent, «3» tungsten, «10» flash, «17» standard A, «18» standard B, «19» standard C, «20» D55, «21» D65, «22» D75, «255» другие
Related
SoundFile
имя аудио файла, прикрепленного к снимку
CFAPattern геометрия фильтров на матрице (Color filter array-CFA)
Например:
Photometric Interpretation представление цвета: «1» монохромное изображение, «2» RGB, «6» YCbCr

Можно сравнить EXIF данные для JPEG файла, полученные из программы Canon ZOOMBrowserEX и приложения ExifRead (поля тегов, которые в программе ExifRead отображаются как «Unknown» сокращены):

ExifRead CanonZOOMBrowserEX
Filename: IMG_2614.JPG
JFIF_APP1: Exif
Main Information
Make: Canon
Model: Canon EOS 300D DIGITAL
Orientation: left-hand side
XResolution: 180/1
YResolution: 180/1
ResolutionUnit: Inch
DateTime: 2004:07:13 11:57:35
YCbCrPositioning: centered
ExifInfoOffset: 196
Sub Information
ExposureTime: 1/400Sec
FNumber: F11,0
ISOSpeedRatings: 200
ExifVersion: 0221
DateTimeOriginal: 2004:07:13 11:57:35
DateTimeDigitized: 2004:07:13 11:57:35
ComponentConfiguration: YCbCr
CompressedBitsPerPixel: 3/1 (bit/pixel)
ShutterSpeedValue: 1/400Sec
ApertureValue: F11,0
ExposureBiasValue: EV0,0
MaxApertureValue: F5,0
MeteringMode: Division
Flash: Not fired
FocalLength: 125,00(mm)
MakerNote: Canon Format: 1408Bytes (Offset:942)
UserComment:
FlashPixVersion: 0100
ColorSpace: sRGB
ExifImageWidth: 2048
ExifImageHeight: 3072
ExifInteroperabilityOffset: 2366
FocalPlaneXResolution: 2048000/595
FocalPlaneYResolution: 3072000/892
FocalPlaneResolutionUnit: Meter
SensingMethod: OneChipColorArea sensor
FileSource: DSC
CustomRendered: Normal process
ExposureMode: Auto
WhiteBalance: Auto
SceneCaptureType: Standard
Vendor Original Information
Self-timer: Off
Quality: Fine
FlashMode: Off
Drive Mode: Single-frame
Focus Mode: One-Shot
ImageSize: Large
Easy shooting mode: Manual
Contrast: +1
Saturation: +1
Sharpness: +1
MeteringMode: Evaluative
AF point selected: Unknown (8197)
Focal length of lens: 100-300(mm)
Flash Activity: Off
Color Tone: Normal
Unknown (0001)3,46: 005C ... FFFF
Unknown (0002)3,4: 0,125,610,914
Unknown (0003)3,4: 100,0,0,0
White Balance: Auto
Flash bias: 0 EV
Unknown (0004)3,33: 0042 ... 0000
Unknown (0093)3,9: 18,0,0...,65535
Image type: IMG:EOS300DDIGITALJPEG
Firmware version: FirmwareVersion1.1.1
Serial number: 3FCD-39869
Unknown (0015)4,1: -1879048192
Image Number: 2262614
Owner name: SergeySherbakov
Unknown (0010)4,1: -2147483280
Unknown (000E)4,1: 2620984
Unknown (000D)1,512:0,...,0.0.0.0.0.0
Unknown (0000)3,18: 0,...0,0,0,0,0,0,0
Unknown (00C0)3,13: 001A ... CC 0190
Unknown (00C1)3,13: 001A ... C6 016C
Unknown (00AA)3,5: 10,529...,1026,698
Unknown (00A8)3,10: 20,429...,0,0,0,0,0
Unknown (00A9)3,41: 82,...,129,127
Color temp: 5200K
Parameters: Standard
Unknown (0012)3,24: 7,7,...,65535
Unknown (0013)3,4: 0,159,7,112
Unknown (0000)3,5: 0,0,0,0,0
Unknown (00B6)4,12: 24,...,262146
ExifR98
ExifR: R98
Version: 0100
Unknown (4097) : 2048
Unknown (4098) : 3072
Thumbnail Information
Compression: OLDJPEG
XResolution: 180/1
YResolution: 180/1
ResolutionUnit: Inch
JPEGInterchangeFormat: 2548
JPEGInterchangeFormatLength: 6492
File Name IMG_2614.JPG
Camera Model Name
Canon EOS 300D DIGITAL
Shooting Date/Time
13.07.2004 11:57:35
Shooting Mode Aperture-Priority AE
Tv(Shutter Speed) 1/400
Av(Aperture Value) 11
Metering Mode Evaluative
Exposure Compensation 0
ISO Speed 200
Lens 100.0 - 300.0mm
Focal Length 125.0mm
Image Size 2048x3072
Image Quality Fine
Flash Off
White Balance Auto
AF Mode One-Shot AF
Parameters Contrast +1
Sharpness +1
Color saturation +1
Color tone Normal
Color Space sRGB
File Size 2240KB
Drive Mode Single-frame shooting
Owner"s Name Sergey Sherbakov
Camera Body No. 1070439357

EXIF данные для RAW (Canon EOS 300D) файла, полученные из программы ExifRead и приложения Canon ZOOMBrowserEX:

ExifRead CanonZOOMBrowserEX
Filename: CRW_5185.CRW
Canon CRW Header
CCDRAW Image: 4910386Bytes(offset:26)
JPEG Image: 534464Bytes(offset:4910412)
Unknown(1803) : 1,0
ImageSpec: 3072Ѓ~2048
ExpouserMode: Single
Unknown(1804) : 0,1256
Unknown(1817) : 24817,6724
CapturedTime: 2004:10:16 10:17:02
ImageFileName: CRW_5185.CRW
ThumbnailFileName: CRW_5185.THM
Unknown(0805) :
Unknown(1814) : 0,3724
Unknown(0805) : EOS 300D DIGITAL CMOS RAW
ImageType: CRW:EOS 300D DIGITAL CMOS RAW
OwnerName: Sergey Sherbakov
ModelName: Canon EOS 300D DIGITAL
Unknown(180B) : 39869,9577
ISOSensivity: 100
ROMOperationMode: USA
FirmwareVersion: Firmware Version 1.1.1
ISOSensivity: 100
LensFocalLength: 18.0(mm)
White Balance: Daylight
Sequence number(Continuous mode) : 0
Flash bias: 0 EV
Unknown(102A) : 66,0,...,0,0,0,0
Unknown(1093) : 18,0,......,5535
Self-timer: Off
Quality: RAW
FlashMode: Off
Drive Mode: Single-frame
Focus Mode: MF
ImageSize: Large
Easy shooting mode: Manual
Contrast: Normal
Saturation: Normal
Sharpness: Normal
MeteringMode: Evaluative
ExposureProgram: Aperture Priority
Focal length of lens: 18-55(mm)
Flash Activity: Off
Color Tone: Normal
Unknown(102D) : 92,0,...,65535,65535
Unknown(0036) : 0E82
Unknown(1834) : 368,2833
CCDImageSize: 3152Ѓ~2068
Unknown(1835) : 1,0,514,4000
Unknown(1038) : 7,7,3072,...,0,65535
Unknown(10C0) : 26,336,....,460,400
Unknown(10C1) : 26,305,....,454,364
Unknown(10C2) : 884,....,78,151,28
Unknown(10AA) : 10,877,...,588
Unknown(10A8) : 20,3871,...,5200
Unknown(10AD) : 62,...,65099,65325
Unknown(10AE) : 5200
Unknown(10AF) : 1024
Unknown(10A9) : 82,1398,...,124,126
Unknown(10B4) : 2
Unknown(10B5) : 10,3,1,2048,1360
Unknown(1039) : 0,159,7,112
Unknown(183B) : 0
File Name CRW_5185.CRW
Camera Model Name
Canon EOS 300D DIGITAL
Shooting Date/Time
16.10.2004 10:17:02
Shooting Mode
Aperture-Priority AE
Tv(Shutter Speed)
1/30
Av(Aperture Value)
3.5
Metering Mode
Evaluative
Exposure Compensation
0
ISO Speed
100
Lens
18.0 - 55.0mm
Focal Length
18.0mm
Image Size
3072x2048
Image Quality
RAW
Flash
Off
White Balance
Daylight
AF Mode
Manual Focus
Parameters
Contrast Normal
Sharpness Normal
Color saturation Normal
Color tone Normal
Color Space
Adobe RGB
File Size
5323KB
Drive Mode
Single-frame shooting
Owner"s Name
Sergey Sherbakov
Camera Body No.
1070439357

Примечания.

1. Некоторые поля данных для тегов «Unknown» в таблицах сокращены.

2. Теги «ShutterSpeedValue», «ApertureValue» и некоторые другие (с идентификатором Value) в соответствии со стандартом EXIF записываются не в привычных фотографических величинах, а в APEX представлении. Иногда приложения для просмотра EXIF данных преобразуют APEX формат к привычному виду, иногда нет.

Что представляет собой формат APEX? APEX (The Additive System for Photographic Exposure) удобная форма записи и, главное, выражения соотношений экспозиционных условий. Удобная потому, что оперирует с логарифмическими величинами с основанием 2. В них удвоение экспозиции соответствует увеличению ее на один шаг, то есть на привычную ступень выдержки или диафрагмы. Чтобы подсчитать экспозицию в формате APEX достаточно воспользоваться простой формулой: AV + TV = LV + SV= EV. Где AV и TV соответственно APEX величина диафрагмы и выдержки, LV яркости, SV светочувствительности. При этом в APEX за нулевые значения величины AV = 0 принята диафрагма f/1,0, выдержки TV = 0 - 1 c, яркости LV=0 - 3,4 кандел/м*м, светочувствительности SV = 0 - 3,125 (в ISO).

Чтобы отличать фотографические термины «диафрагма», «выдержка» от величин в APEX принято все величины, выраженные в APEX формате сопровождать словом «величина» - как «Aperture value», а при сокращении добавлять букву «V» - как Av.

Интересно, что сейчас в камерах Canon с режимами приоритета выдержки и диафрагмы Tv и Av ряд значений на органах управления записан в привычных обратных секундах и диафрагменных числах. Объясняется это тем, что на камерах Canon «значки» Tv и Av появились, когда APEX формат был практически важен для вычисления экспозиции и популярен. И в качестве значений этих величин использовались величины APEX. Затем с развитием автоматики и унификации экспонометрических устройств практическая важность формата APEX для фотографа стала минимальной и от него отказались, вернувшись к привычным диафрагменным числам и секундам. А маркировка режимов у Canon осталась прежней ().

Как отображается информация в программе для просмотра съемочных параметров, зависит от разработчика. Формально тегу «Aperture value» соответствует величина в единицах APEX без всяких суффиксов и префиксов. Но, к примеру, в Canon ZOOM Browzer EX тег «Aperture value» отображается в формате диафрагменного числа, но без префикса «f/» (для ясности следовало бы писать именно так, то есть «f/»), а Tv, которое, тем не менее, расшифровывается как «Shutter Speed», как доля секунды без «c», то есть верно, если знать об истории появления значков Av/Tv на Canon. В ACDSee версии 5 «Aperture value» корректно отображается в единицах APEX, а в версии 7 в привычном формате «f/число». Определить, что скрывается за «Aperture value» в вашей программе, можно посмотрев на значение другого тега EXIF «F-number». Если числовые значения совпадают, то «Aperture value» отображается в диафрагменных числах, если нет - в APEX единицах. Тогда проверьте соответствие по формуле Aperture value = 2 х Log 2 F-number. (Легко заметить, что при f/4 - APEX - так же 4, но это единственное исключение).

3. Стандарты DCF и EXIF постоянно «расширяются» и к ним добавляются новые спецификации и, соответственно, теги. Кроме того, производители техники и ПО иногда вводят новые спецификации метаданных. Такие спецификации могут интегрироваться в EXIF, но могут быть и совершенно независимыми. Так в полях EXIF данных есть маркеры, указывающие на совместимость с форматами представления данных FlashPix (стандарта International Imaging Industry Association - I3A), маркеры описывающие расширение ExifR98, GPS данные и другие. С выходом EXIF PRINT, для автоматической обработки изображения в соответствие с сюжетной программой съемки к EXIF добавлены теги, описывающие «сюжетные» настройки цифровой камеры: вспышка, экспорежим, баланс белого, выдержка, дистанция до объекта, источник света, сюжетная программа, цифровой зум, постобработка, контраст, насыщенность, повышение резкости, шумоподавление. Альтернативная технология согласования печати и обработки PIM ( - EPSON, 2001 год) так же добавляет к метаданным 12 (PIM I) или 14 (PIM II) «сюжетных» пунктов.


Метаданные, редактируемые в ACDSee

Среди стандартных тегов EXIF есть предназначенные для систематизации хранения снимков на компьютере. Это: владелец камеры, имя пользователя, авторские права, описание и другие. Если их нельзя заполнить непосредственно при съемке, то нужно использовать либо «фирменное» ПО от камеры либо универсальные программы. К числу таких программ относятся, например, Adobe Photoshop и ACDSee. С их помощью можно изменить значения перечисленных тегов. Но нужно быть внимательным, не все «поля», которые можно заполнить в таких программах сохраняются как метаданные файла. Программа может хранить данные в своей базе данных и не записывать их в файл изображения. Так Adobe Photoshop помимо стандартных (перечисленных выше) полей описания файла, позволяет заполнить многие другие, а для RAW файлов записать даже «скорректированные» настройки камеры. Но хранится вся эта дополнительная информация либо в единой базе данных Photoshop на вашем компьютере, либо в виде переносимого вместе с основным файлом файла метаданных «*.XMP» (а сам RAW файл, по определению, не подвергается изменениям).

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

Типы метаданных

Для начала разберемся, какие вообще типы метаданных могут быть в изображении. Все скорее всего это итак знают, но на всякий случай расскажу:

  • EXIF (Exchangeable Image File Format) - стандарт хранения метаданных в изображении, который используется цифровыми камерами для сохранения информации о выдержке, диафрагме и других параметрах съемки. Метаданные в формате EXIF могут храниться в файлах форматов JPEG, TIFF и RIFF WAV. По стандарту из пользовательских описательных метаданных в EXIF может храниться только описание (тег Description) и комментарий (тег «User Comment»), но Windows Explorer использует также несколько дополнительных тегов (XPTitle, XPSubject, XPAuthor, XPComment, XPKeywords). Windows Explorer игнорирует тег XPTitle при наличии стандартного тега Description.
  • IPTC (International Press Telecommunications Council) - название скорее организации, разработавшей стандарт. Сам стандарт метаданных называется IIM (Information Interchange Model). Самый старый из описываемых стандартов. В изначальной версии стандарта метаданные хранились так, что ПО, не знающее о существовании IPTC, не могло работать с файлами изображений, в которых были такие метаданные. Однако позже Adobe расширила стандарт, перенеся метаданные в блок APP13 JPEG-файла, что позволило ПО, не знающему о стандарте, успешно читать JPEG-файл, игнорируя неизвестные метаданные. В метаданных IPTC могут храниться такие описательные поля, как ObjectName (заголовок), Keywords (ключевые слова), Caption (описание, есть несколько вариаций тега).
  • XMP (eXtensible Metadata Platform) - стандарт, разработанный Adobe. Метаданные хранятся в модели RDF, представленной в формате XML, позволяя включать любую необходимую информацию в файл изображения. Именно этот формат предпочитает использовать WIC (Windows Imaging Component) в Windows Vista/7.

Принципы работы с метаданными в WPF

Для работы с метаданными в WPF используются классы BitmapEncoder, BitmapDecoder, BitmapSource, BitmapFrame, BitmapMetadata, InPlaceMetadataWriter.
У классов BitmapEncoder и BitmapDecoder есть наследники, позволяющие работать с конкретными форматами изображений. В моем случае - JpegBitmapEncoder и JpegBitmapDecoder.
Класс InPlaceMetadataWriter используется для изменения метаданных прямо на месте, без перекодирования файла.
Данные читать и записывать можно двумя методами - либо с помощью функций GetQuery/SetQuery, оперирующих с иерархическими именами тегов метаданных, либо с помощью полей класса BitmapMetadata, позволяющих легко обращаться к метаданным.
При обращении к метаданным через поля класса BitmapMetadata, WIC пытается найти соответствующие поля в метаданных разных стандартов в следующем порядке: сначала XMP, затем IPTC и EXIF. При записи тегов через поля класса BitmapMetadata, WIC записывает их в формате XMP.

Чтение метаданных

Вот готовый пример функции, с помощью которой можно читать метаданные из файла:

  1. FileStream f = File .Open("test.jpg" , FileMode.Open);
  2. BitmapDecoder decoder = JpegBitmapDecoder.Create(f, BitmapCreateOptions.IgnoreColorProfile, BitmapCacheOption.Default);
  3. BitmapMetadata metadata = (BitmapMetadata)decoder.Frames[ 0 ].Metadata;
  4. // Получаем заголовок через поле класса
  5. string title = metadata.Title;
  6. // Получаем заголовок из XMP
  7. string xmptitle = (string )metadata.GetQuery(@"/xmp/dc:title" );
  8. // Получаем заголовок из EXIF
  9. string exiftitle = (string )metadata.GetQuery(@"/app1/ifd/{ushort=40091}" );
  10. // Получаем заголовок из IPTC
  11. string iptctitle = (string )metadata.GetQuery();

Тут все достаточно просто и прозрачно, поэтому сразу перейдем к записи.

Запись метаданных

  1. BitmapMetadata md = new BitmapMetadata ("jpg" );
  2. md.SetQuery(@"/xmp/dc:title" , xmptitle);
  3. md.SetQuery(@"/app1/ifd/{ushort=40091}" , exiftitle);
  4. md.SetQuery(@"/app13/irb/8bimiptc/iptc/object name" , iptctitle);
  5. BitmapFrame frame = BitmapFrame.Create(decoder.Frames[ 0 ], decoder.Frames[ 0 ].Thumbnail, md, decoder.Frames[ 0 ].ColorContexts);
  6. BitmapEncoder encoder = new JpegBitmapEncoder ();
  7. encoder.Frames.Add(frame);
  8. FileStream of = File .Open("test2.jpg" , FileMode.Create, FileAccess.Write);
  9. encoder.Save(of);
  10. of.Close();

Код идет, как продолжение фрагмента, читающего метаданные. Мы создаем копию оригинального файла, записав в его метаданные тайтл во всех трех форматах метаданных.

Редактирование метаданных «на месте»

До сих пор я рассказывал вобщем-то достаточно хорошо документированные и простые вещи, однако здесь все уже сложнее. Пример в официальной документации (MSDN) неверен и вообще противоположен по смыслу реальному положению вещей.
Для редактирования метаданных «на месте» необходимо создать объект класса InPlaceBitmapMetadataWriter:

После этого с ним можно работать, как с обычным BitmapMetadata, вызывая SetQuery для задания нужных метаданных.
Чтобы сохранить изменения, нужно вызвать метод TrySave(), пытающийся сохранить изменения в оригинальный поток. Попытка записи может быть успешной, а может и нет. При успешной попытке метод возвращает true, при ошибке - false.
Самая частая ошибка, которая может помешать записать изменения - в метаданных недостаточно свободного места. Как правило, все свежеснятые фотографии не содержат в метаданных достаточного места, поэтому для того, чтобы начать пользоваться редактированием метаданных на месте, следует один раз сделать копию файла, дополнив метаданные в нем специальными полями padding, оставляющими свободное место для последующих изменений. Для этого файл открывается, нужный кадр и его метаданные клонируются, и выполняется несколько запросов:

После этого кадр достаточно закодировать энкодером и записать в нужный поток, в результате чего в изображении появится свободное место для редактирования метаданных на месте впоследствии.
Значение паддинга в 2048 байт как правило достаточно. Если вам необходимо больше - можно указать большее значение.

Строки запросов

Я думаю у всех при изучении методов SetQuery/GetQuery возникает резонный вопрос - откуда брать все эти строки запросов, которые простыми и интуитивно понятными не назовешь?
После продолжительных поисков в MSDN нашелся соответствующий список . Здесь есть пожалуй все необходимые запросы. Отсутствующие можно в принципе составить по аналогии, примеров - предостаточно:)

Тонкости и подводные камни

  • Версии WIC в Windows XP и Windows Vista могут глючить, если у вызывающего функцию JpegBitmapEncoder.Save() потока не указан атрибут STAThread (по умолчанию, все создаваемые в приложении потоки получают атрибут MTAThread, если не указано обратное).
  • Версия WIC в Windows 7 сохраняет значения тега EXIF UserComment по умолчанию в Unicode, тогда как в Windows XP и Windows Vista - в кодировке текущего языка системы (CP1251 для русского). Формат записи UTF-8 параметров такой: само значение тега сохраняется не как строка, а как массив байт. Первые 7 байт - ASCII строка «UNICODE», после чего начинается Unicode-закодированная последовательность символов тега.
  • К параметру BitmapCacheOptions следует относиться внимательно. Значение OnLoad кэширует все данные изображений в несжатом виде в RAM, поэтому если вы откроете штук 20 крупноформатных JPEG-ов с этой опцией - свободная память будет съедена очень быстро. Эта память не освобождается при удалении самих классов изображений (BitmapFrame, BitmapDecoder и пр.) и обработке их сборщиком мусора. Кроме того, для использования InPlaceBitmapMetadataWriter следует открывать изображение с BitmapCacheOptions = OnDemand или Default.
  • В примере я открываю изображение с флагом IgnoreColorProfile, т.к. без него на некоторых изображениях BitmapDecoder выбрасывает исключение.

Заключение

В целом работа с метаданными с помощью WPF мне показалась достаточно сложной и запутанной. Практически все из описанных подводных камней стоили мне нескольких часов отладки и гугления, информации об этом нигде нет, а симптомы иногда очень странные. Официальная документация (MSDN) освещает этот вопрос плохо, а местами и вовсе неверна.
Надеюсь, что эта собранная информация поможет тем, кому понадобится работать с метаданными через WPF, и сэкономит им несколько часов времени:)

P.S. Буду рад увидеть в комментариях замечания (если я где-то ошибся) и описания подводных камней, с которыми я не встречался или забыл упомянуть.

P.P.S. Стоит ли продолжать писать о WPF, или я пишу давно известные вещи?

Так еще и внутри фотографии можно зашифровать большущую кучу скрытых данных. Стандарт, шифрующий эти, так называемые метаданные , получил название EXIF (англ. Exchangeable Image File Format) .

Конечно, речь не идет о скрытых посланиях и тайных переписках, хотя можно и это устроить… Прежде всего стандарт EXIF используется для сохранения и просмотра различных характеристик фотографии, ее параметров, показателей, сведений об авторстве и объекте фотосъемки, а также много еще какой информации. То есть метаданные нужны только с точки зрения информационной составляющей, а значит можно обойтись и без них.

Возможность сохранять и просматривать метаданные фотографий используют множество программ. Если используете ОС Windows, то скорее всего вы уже сталкивались с EXIF данными. Нажмите правой кнопкой мыши на любой фотографии, в появившемся меню выберите в самом низу пункт «Свойства» .

Далее, хоть у всех и разная версия Windows, но смысл одинаковый: найдите и нажмите на кнопку/вкладку «Подробно» . Откроется таблица, где будет отображена информация, разделенная на условные категории: «Описание», «Источник», «Изображение», «Камера», «Улучшенное фото», «Файл». Те сведения что отобразились во всей этой таблице — это и есть ни что иное как EXIF данные.

Опустите правый ползунок свойств и посмотрите как много всяких разных метаданных может быть у фотографии. Уверен в вашем примере большая часть строчек будут пусты, поскольку их нужно заполнять самостоятельно. А вот категория «Камера», возможно, будет заполнена — ее автоматически заполняет фотоаппарат или смартфон.

Это не исчерпывающий список возможных метаданных. Просто разработчики Windows посчитали, что такой таблицы будет достаточно, чтобы затронуть основные информационные аспекты фотографии. На самом деле таких данных может быть намного больше! Причем весь этот объем можно разделить на две группы: основные и дополнительные.

К основным параметрам я отношу те группы данных, что будут считываться в любой программе и устройстве, способном заглянуть в закрома фотографии. К таким данным нужно отнести: сведения о файле, описание, авторские права, информация о изображении, данные о камере и условиях снимка. Это означает, что какой бы вы программой не воспользовались, она всегда покажет вам как минимум эту информацию.

К дополнительным параметрам я отношу данные, с которыми будут работать только отдельно взятые программы. Например, фотошоп может создать вкладку «История» и вести в нее протокол редактирования фотографии. Сохраняйте фото, открывайте снова спустя время, хоть на другом компьютере, но обязательно через фотошоп, и вы можете всегда увидеть какие метаданные сохранены во вкладке «История». Но если попытаетесь заглянуть в EXIF с помощью, например, Gimp, то этой вкладки уже не обнаружите.

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

EXIF данные могут быть изменяемыми и неизменяемыми .

Изменяемые , в свою очередь, можно разделить еще на два подвида:

редактируемые человеком , например, самому указать автора снимка, а позже удалить и написать новое имя;

редактируемые программой , например, когда вы сохраняете фотографию в фотошопе, программа сама добавляет тег, что фото было изменено в фотошопе версии такой-то . Сами вы прописать или удалить этот тег не сможете (если только через специальный софт, но это уже другая история), а вот если пересохранить фотографию в фотошопе другой версии , то тег будет вновь изменен в части версии, например было CS5, а стало CS6.

Неизменямые данные записываются программами и устройствами без вашей воли и намертво остаются вместе с этой фотографией, например, разрешение картинки, формат файла, дата создания, данные камеры.

Зачем и как использовать EXIF данные?

  • Прежде всего это очень удобная запись информации о снимке, ну не вести же в блокноте записи с какой выдержкой вы сделали тот или иной снимок! Все записано удобно в файлик, когда понадобится, открыли, посмотрели, вспомнили.
  • Это доказательство вашего авторства снимка, если вы введете всю необходимую информацию о себе.
  • На счет блокнота, я не далек от истины. Вы также можете открывать нужную фотографию и вписывать туда нужную для вас информацию. Оно будет там надежно храниться и никуда не денется. Но напоминаю, что просматривать ее придется, через ту же программу.
  • Вам понравилось/не понравилось качество сделанного снимка? — Проанализируйте данные в категории «Камера». Там вы узнаете при каких условиях и настройках фотоаппарата был сделан этот снимок. Восхитились/нашли ошибку — получили бесценный опыт.
  • Профессиональные обозреватели изображений, как, например, осуществляют сортировку и фильтрацию больших масс фотографий по EXIF метаданным.
  • Передайте любовное послание человечку, или зашифруйте секретные данные и вывезите/перешлите их из страны =))

В-третьих , в интернете полно онлайн-сервисов по работе с EXIF-метаданными. Их преимущество в том, что не придется ничего устанавливать на компьютер. Один раз сделал эту операцию и забыл.

Из минусов отмечу скорость работы — она напрямую зависит от возможностей вашего интернет-тарифа.

Пример сайта для удаления EXIF онлайн — IMGonline.com.ua .

Заметили ошибку в тексте - выделите ее и нажмите Ctrl + Enter . Спасибо!

ShowExif – это небольшая утилита для просмотра метаданных цифровых изображений, полученных с помощью профессиональных камер.

Использование

Данное программное обеспечение едва ли пригодится Вам в повседневной работе с камерой. Однако, иногда оно может оказаться не менее полезным, чем популярные графические редакторы и конвертеры изображений, которые Вы используете чуть ли не каждый день. Необходимость просмотреть метаданные, доступ к которым и предоставляет утилита, может возникнуть по разным причинам. Однако, самая популярная из них – ознакомление с "пробегом" фотоаппарата.

Возможности

ShowExif не требует установки, так как является портативной. После загрузки Вы можете запускать его и сразу приступать к использованию. Чтобы просмотреть число, отображаемое в счетчике, ведущем учет закрываемого затвора, предварительно сделайте фотографию с камеры и загрузите ее на компьютер.

Для этого следует использовать изображение RAW формата. Сделав снимок, откройте его с помощью утилиты в браузере. После этого в экране отобразится вся необходимая информация. Пункт "Total Number of Shutter Releases", отображаемый в левой части таблицы – то, что Вам необходимо. Просмотрите число в строке напротив него – это и есть пробег Вашей камеры. Все метаданные можно копировать, удалять и сохранять на диск. Дополнительно можно "прикреплять" к ним первью фотографий.

Ключевые особенности

  • отображает EXIF, оставляемые фототехникой от наиболее популярных производителей;
  • позволяет копировать, удалять и сохранять метаданные на диск и в буфер обмена;
  • для просмотра пробега фотоаппарата требуется снимок в RAW формате;
  • полностью переведена на русский язык;
  • не требует дополнительной установки в систему, может храниться на съемном накопителе;
  • доступна совершенно бесплатно;
  • выполняет быстрый экспорт Thumbnails на диск;
  • позволяет просматривать пробег не для всех фотоаппаратов, а лишь для тех, которые имеют этот счетчик;
  • работает на всех версиях операционной системы Windows.