Partager via


Comment : lire des métadonnées d'image

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 création et le modèle de l’appareil photo utilisé pour capturer l’image. Avec GDI+, vous pouvez lire les métadonnées existantes et écrire de nouvelles métadonnées dans des fichiers image.

GDI+ stocke un élément de métadonnées individuel dans un PropertyItem objet. Vous pouvez lire la PropertyItems propriété d’un Image objet pour récupérer toutes les métadonnées d’un fichier. La PropertyItems propriété retourne un tableau d’objets PropertyItem .

Un PropertyItem objet a les quatre propriétés suivantes : Id, , ValueLen, et Type.

Id

Balise qui identifie l’élément de métadonnées. Certaines valeurs pouvant être affectées Id sont indiquées dans le tableau suivant :

Valeur hexadécimale Description
0x0320

0x010F

0x0110

0x9003

0x829A

0x5090

0x5091
Titre de l’image

Fabricant d’équipements

Modèle d’équipement

ExifDTOriginal

Temps d’exposition exif

Table Luminance

Table Chrominance

Valeur

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

Len

Longueur (en octets) du tableau de valeurs pointées par la Value propriété.

Type

Type de données des valeurs du tableau pointé par la Value propriété. Les formats indiqués par les valeurs de Type propriété sont affichés dans le tableau suivant :

Valeur numérique Description
1 Un Byte
2 Tableau d’objets Byte encodés en ASCII
3 Entier 16 bits
4 Entier 32 bits
5 Tableau de deux Byte objets qui représentent un nombre rationnel
6 Inutilisé
7 Undefined
8 Inutilisé
9 SLong
10 SRational

Exemple

L’exemple de code suivant lit et affiche les sept éléments de métadonnées dans le fichier FakePhoto.jpg. Le deuxième élément de propriété (index 1) de la liste a Id 0x010F (fabricant d’équipements) et Type 2 (tableau d’octets encodé en ASCII). L’exemple de code affiche la valeur de cet élément de propriété.

// 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);
'Create an Image object. 
Dim image As Bitmap = New Bitmap("c:\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
'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)

Le code produit une sortie similaire à ce qui suit :

 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.

Compilation du code

L’exemple précédent est conçu pour une utilisation avec Windows Forms et nécessite PaintEventArgse, qui est un paramètre du Paint gestionnaire d’événements. Gérez l’événement du Paint formulaire et collez ce code dans le gestionnaire d’événements de peinture. Vous devez remplacer FakePhoto.jpg par un nom d’image et un chemin valides sur votre système et importer l’espace System.Drawing.Imaging de noms.

Voir aussi