Show / Hide Table of Contents

Практическое руководство. Чтение метаданных изображения

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

GDI+ хранит каждый отдельный блок метаданных в PropertyItem объекта. Можно прочитать PropertyItems свойство Image объекта для извлечения метаданных из файла. PropertyItems Свойство возвращает массив PropertyItem объектов.

Объект PropertyItem имеет следующие четыре свойства: Id, Value, Len, и Type.

Идентификатор

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

Шестнадцатеричное значение Описание
0x0320

0x010F

0x0110

0x9003

0x829A

0x5090

0x5091
Изображение заголовка

Поставщик вычислительной техники

Модель оборудования

ExifDTOriginal

Время выдержки EXIF

Таблицы освещенности

Таблицы цветности

Значение

Массив значений. Формат значений определяется Type свойство.

Len

Размер (в байтах) массив значений, на который указывает Value свойство.

Тип

Тип значений в массиве, на который указывает Value свойство. Типы, определяемые по Type в следующей таблице показаны значения свойств

Числовое значение Описание
1 А Byte
2 Массив Byte объекты в кодировке ASCII
3 16-разрядное целое число
4 32-разрядное целое число
5 Массив из двух Byte объекты, представляющие рациональное число
6 Не используется
7 Не определено
8 Не используется
9 SLong
10 SRational

Пример

Описание

В следующем примере кода считывает и отображает семи блоков метаданных в файле FakePhoto.jpg. Второй элемент свойства (индекс 1) в списке Id 0x010F (производитель) и Type 2 (массив байтов в кодировке ASCII). В примере кода отображает значение данного свойства.

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

Property Item 0

id: 0x320

type: 2

length: 16 bytes

Property Item 1

id: 0x10f

type: 2

length: 17 bytes

Property Item 2

id: 0x110

type: 2

length: 7 bytes

Property Item 3

id: 0x9003

type: 2

length: 20 bytes

Property Item 4

id: 0x829a

type: 5

length: 8 bytes

Property Item 5

id: 0x5090

type: 3

length: 128 bytes

Property Item 6

id: 0x5091

type: 3

length: 128 bytes

The equipment make is Northwind Camera.

Код

// Create an Image object. 
Image image = new Bitmap(@"c:\FakePhoto.jpg");

// Get the PropertyItems property from image.
PropertyItem[] propItems = image.PropertyItems;

// Set up the display.
Font font = new Font("Arial", 12);
SolidBrush blackBrush = new SolidBrush(Color.Black);
int X = 0;
int Y = 0;

// For each PropertyItem in the array, display the ID, type, and 
// length.
int count = 0;
foreach (PropertyItem propItem in propItems)
{
    e.Graphics.DrawString(
    "Property Item " + count.ToString(),
    font,
    blackBrush,
    X, Y);

    Y += font.Height;

    e.Graphics.DrawString(
       "   iD: 0x" + propItem.Id.ToString("x"),
       font,
       blackBrush,
       X, Y);

    Y += font.Height;

    e.Graphics.DrawString(
       "   type: " + propItem.Type.ToString(),
       font,
       blackBrush,
       X, Y);

    Y += font.Height;

    e.Graphics.DrawString(
       "   length: " + propItem.Len.ToString() + " bytes",
       font,
       blackBrush,
       X, Y);

    Y += font.Height;

    count++;
}
// Convert the value of the second property to a string, and display 
// it.
System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
string manufacturer = encoding.GetString(propItems[1].Value);

e.Graphics.DrawString(
   "The equipment make is " + manufacturer + ".",
   font,
   blackBrush,
   X, Y);

Компиляция кода

Предыдущий пример предназначен для работы с Windows Forms и требует PaintEventArgs e, который является параметром Paint обработчик событий. Обработка формы Paint событий и вставьте этот код в обработчик событий paint. Необходимо заменить FakePhoto.jpg допустимы для системы и импорта путь и имя образа System.Drawing.Imaging пространства имен.

См. также

  • Работа с растровыми и векторными изображениями с использованием классов Image, Bitmap и Metafile
  • Работа с растровыми и векторными изображениями
Back to top Неофициальная документация по .NET на русском языке. Лицензия: CC-BY 4.0. Основано на документации по .NET с Microsoft Docs
Generated by DocFX