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

GDI+ stocke un élément individuel de métadonnées dans un objet PropertyItem. Vous pouvez lire la propriété PropertyItems d'un objet Image pour récupérer 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 : Id, Value, Len et Type.

Id

Balise identifiant la métadonnée. Certaines valeurs pouvant être assignées à Id sont présenté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 dans le tableau vers lequel la propriété Value pointe. 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

Un Byte

2

Tableau d'objets Byte encodés en ASCII

3

Entier 16 bits

4

Entier 32 bits

5

Tableau de deux objets Byte qui représentent un nombre rationnel

6

Non utilisé

7

Indéfini

8

Non utilisé

9

SLong

10

SRational

Exemple

Description

L'exemple de code suivant lit et affiche les sept métadonnées du fichier FakePhoto.jpg. Le second élément de la propriété (index 1) dans la liste porte Id 0x010F (fabricant de l'équipement) et Type 2 (tableau d'octets encodé en ASCII). L'exemple de code affiche la valeur de cet élément de propriété.

Le code produit une sortie identique à 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.

Code

        '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)

// 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);

Compilation du code

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

Voir aussi

Autres ressources

Images, bitmaps et métafichiers

Utilisation des images, bitmaps, icônes et métafichiers