Come leggere i metadati delle immagini (HTML)

[ Questo articolo è rivolto agli sviluppatori per Windows 8.x e Windows Phone 8.x che realizzano app di Windows Runtime. Gli sviluppatori che usano Windows 10 possono vedere Documentazione aggiornata ]

Ti mostreremo come recuperare i metadati da un file immagine. I formati immagine, ad esempio JPEG, TIFF e PNG, supportano diversi tipi di metadati incorporati che descrivono elementi quali parole chiave, posizione GPS e informazioni sulle fotocamere. Puoi accedere alle proprietà delle immagini di uso comune nonché ai metadati non elaborati in formati quali EXIF e XMP.

A seconda dello scenario attivo, sono disponibili due classi per l'accesso ai metadati delle immagini: Windows.Storage.FileProperties.ImageProperties e Windows.Graphics.Imaging.BitmapPropertiesView.

Puoi usare BitmapPropertiesView per accedere alle proprietà di Windows, come ImageProperties. Otterrai tuttavia un livello di accesso più basso alle strutture dei metadati nativi nel file che usano il linguaggio di query dei metadati WIC. L'accesso ai metadati nativi rappresenta uno scenario più avanzato che consente di accedere a una quantità di metadati superiore a quella fornita dal sistema di proprietà di Windows.

Cosa sapere

Tecnologie

Prerequisiti

Istruzioni

Passaggio 1: Recupera un oggetto decodificatore

Scrivi la parte iniziale di una funzione che riceve un oggetto BitmapDecoder e dichiara le variabili in cui archiviare le proprietà recuperate.

(function (decoder) {
      var orientation;
      var xmpCreator;

Usa il decodificatore per accedere ai metadati dell'immagine. Se ancora non disponi di un oggetto decodificatore, vedi Come decodificare un'immagine. Dichiara le variabili per definirne l'ambito.

Passaggio 2: Recupera una proprietà di Windows

La classe BitmapDecoder include un membro BitmapProperties di tipo BitmapPropertiesView. Come per ImageProperties, puoi richiedere in modo asincrono una proprietà di Windows supportata passando un elenco di nomi di chiavi di proprietà a bitmapProperties.getPropertiesAsync.

Nota  Per ogni formato non sono supportate tutte le proprietà. In Criteri per i metadati fotografici sono elencati i formati di immagine supportati per ogni proprietà.

 

     return 
decoder.bitmapProperties.getPropertiesAsync(["System.Photo.Orientation"])
     .then(function(retrievedProps) {

BitmapPropertiesView si comporta in modo diverso da ImageProperties per alcuni aspetti importanti:

  • Devi verificare l'esistenza di una proprietà per poterla recuperare dalla raccolta. Se la proprietà non esiste, il metodo restituisce un errore.
  • Ogni valore di proprietà è di tipo BitmapTypedValue. Questo oggetto dispone di un membro Value contenente i dati effettivi e di un membro Type che indica i dati.
  • BitmapPropertiesView restituisce un errore se il formato dell'immagine non supporta una proprietà richiesta. È necessario gestire questi errori o verificare che il codice richieda solo proprietà supportate dal formato dell'immagine. I file BMP, ad esempio, non contengono metadati.

Ecco come cercare una proprietà:

if (retrievedProperties.hasKey("System.Photo.Orientation") {
        orientation = retrievedProperties.lookup("System.Photo.Orientation").value;
    }     
}, function (error) {
    switch (error.number) {
        case -2003292287:
            // The image format does not support this property.
            break;
        case -2003292287:
            // The image format does not support metadata.
            break;
        default:
            // Catch any other errors.
            break;
    }
});

Passaggio 3: Recupera i metadati nativi dell'immagine

Sebbene ImageProperties sia limitato alle proprietà di Windows, BitmapPropertiesView consente di accedere alla maggior parte dei metadati archiviati all'interno di un'immagine. Per un elenco di formati di metadati supportati da ogni codec di bitmap, vedi l'argomento relativo alle query dei metadati nei formati immagine nativi.

La modalità d'uso del linguaggio di query dei metadati WIC per cercare le proprietà è simile a quella delle proprietà System.Photo. Devi sostituire il nome della proprietà con una stringa di query dei metadati.

Sostituisci il codice scritto al passaggio 2 con questo codice:

return decoder.bitmapProperties.getPropertiesAsync(["/xmp/dc:creator"])
.then(function(retrievedProps) {
    if (retrievedProperties.hasKey("/xmp/dc:creator") {
        xmpCreator = retrievedProperties.lookup("/xmp/dc:creator").value;
    }     
}, function (error) {
    switch (error.number) {
        case -2003292287:
            // The image format does not support this property.
            break;
        case -2003292287:
            // The image format does not support metadata.
            break;
        default:
            // Catch any other errors.
            break;
    }
});

Questo specifico frammento di codice richiede i metadati dell'autore definiti dallo schema XMP Dublin Core. La query "/xmp/dc:creator" è valida solo per le immagini JPEG. Le immagini TIFF, ad esempio, supportano anche metadati XMP, ma la query TIFF equivalente è "/ifd/xmp/dc:creator".

Argomenti correlati

Come decodificare un'immagine

Panoramica sul linguaggio di query per metadati

Proprietà System.Photo

Come scrivere i metadati dell'immagine

Criteri per i metadati fotografici