Partager via


Lecture des métadonnées

Certains fichiers image contiennent des métadonnées que vous pouvez lire pour déterminer les fonctionnalités de l'image. Par exemple, une photographie numérique peut contenir des métadonnées que vous pouvez lire pour déterminer la marque et le modèle de l'appareil photo utilisé pour capturer l'image. Avec GDI+, vous pouvez non seulement lire des métadonnées existantes, mais aussi enregistrer les nouvelles métadonnées dans des fichiers image.

GDI+ stocke une métadonnée individuelle dans un objet PropertyItem. Vous pouvez lire la propriété PropertyItems d'un objet Image pour extraire toutes les métadonnées d'un fichier. La propriété PropertyItems retourne un tableau d'objets PropertyItem.

Un objet PropertyItem contient les quatre propriétés suivantes :

Identificateur

Balise identifiant la métadonnée. Certaines valeurs auxquelles un Id peuvent être assignées sont énumérées dans le tableau suivant.

Valeur hexadécimale Description
0x0320

0x010F

0x0110

0x9003

0x829A

0x5090

0x5091

Titre de l'image

Fabricant de l'équipement

Modèle de l'équipement

ExifDTOriginal

Temps d'exposition Exif

Tableau de luminance

Tableau de chrominance

Value

Tableau de valeurs. Le format des valeurs est déterminé par la propriété Type.

Len

Longueur (en octets) du tableau de valeurs sur lequel pointe la propriété Value.

Type

Type de données des valeurs du tableau sur lequel pointe la propriété Value. Les formats indiqués par les valeurs de la propriété Type sont présentés dans le tableau suivant.

Valeur numérique Description
1 Octet
2 Tableau d'objets Byte codés en ASCII
3 Entier de 16 bits
4 Entier de 32 bits
5 Tableau de deux objets Byte représentant un nombre rationnel
6 Non utilisé
7 Indéfini
8 Non utilisé
9 SLong
10 SRational

L'exemple suivant lit et affiche les sept métadonnées du fichier FakePhoto.jpg.

'Create an Image object. 
Dim image = New Bitmap("FakePhoto.jpg")
      
'Get the PropertyItems property from image.
Dim propItems As PropertyItem() = image.PropertyItems
      
'Set up the display.
Dim font As New Font("Arial", 12)
Dim blackBrush As New SolidBrush(Color.Black)
Dim X As Integer = 0
Dim Y As Integer = 0
      
'For each PropertyItem in the array, display the id, type, and length.
Dim count As Integer = 0
Dim propItem As PropertyItem
For Each 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 += 1
Next propItem
[C#]
//Create an Image object. 
Image image = new Bitmap("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++;
}

Le code précédent produit un résultat analogue à celui-ci :

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

Le second élément de la propriété (index 1) dans la liste porte l'Id 0x010F (fabricant de l'équipement) et le Type 2 (tableau d'octets codé en ASCII). Le code suivant, qui est une continuation de l'exemple précédent, affiche la valeur de cet élément de propriété :

'Convert the value of the second property to a string, and display it.
Dim encoding As New System.Text.ASCIIEncoding()
Dim manufacturer As String = encoding.GetString(propItems(1).Value)
      
e.Graphics.DrawString( _
   "The equipment make is " + manufacturer + ".", _
   font, _
   blackBrush, _
   X, Y)
[C#]
//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);

Le code précédent produit un résultat analogue à celui-ci :

The equipment make is Northwind Camera.