Gambaran Umum Metadata WIC

Topik ini memperkenalkan dukungan metadata pencitraan yang disediakan oleh Komponen Pencitraan Windows (WIC). Ini menyediakan pengenalan untuk membaca dan menulis metadata gambar, bahasa kueri metadata, dan ekstensibilitas handler metadata.

Metadata gambar adalah data yang disematkan di dalam file gambar yang menyediakan informasi tambahan tentang gambar, seperti perangkat yang digunakan untuk mengambil gambar atau dimensi gambar. Meskipun terkandung dalam file gambar itu sendiri, metadata ini bukan bagian dari data penyajian. WIC menyediakan antarmuka yang memungkinkan Anda membaca dan menulis metadata ini untuk beberapa format metadata umum termasuk Extensible Metadata Platform (XMP), Exchangeable Image File (EXIF), dan Png Textual Data (tEXt).

Topik ini berisi bagian berikut.

Prasyarat

Untuk memahami topik ini, Anda harus terbiasa dengan antarmuka encoder dan decoder WIC dan komponen Model Objek Komponen (COM) terkait, seperti yang dijelaskan dalam Gambaran Umum Komponen Pencitraan Windows. Ini juga membantu memiliki keakraban umum dengan beberapa format metadata pencitraan yang digunakan saat ini.

Pengantar

Metadata menyediakan informasi yang diperluas tentang gambar. Informasi ini dapat digunakan dalam beberapa cara. Gambar mungkin berisi metadata seperti deskripsi, peringkat, tag kategori, dan informasi hak cipta. Mengakses metadata memudahkan untuk melakukan tugas seperti manajemen aset, lokasi file, atau menentukan informasi hak cipta. Misalnya, Windows Photo Gallery di Windows Vista memungkinkan Anda menambahkan deskripsi dan tag kategori ke gambar. Ini memungkinkan penemuan gambar yang lebih baik dan cara yang nyaman untuk mengategorikan gambar. Menggunakan API WIC dan format metadata umum, aplikasi dapat dengan mudah menulis atau membaca jenis metadata ini ke atau dari gambar.

Diagram berikut mengilustrasikan konten file JPEG yang menyertakan blok metadata dan item metadata yang disematkan.

gambar jpeg dengan metadata peringkat

Dalam contoh gambar ini, metadata disematkan dalam file gambar dalam bingkai gambar. Format JPEG tidak mendukung beberapa bingkai gambar, sehingga metadata secara konseptual dilampirkan ke bingkai tunggal ini. Format yang mendukung beberapa bingkai, seperti TIFF, mungkin memiliki metadata yang terpasang pada setiap bingkai gambar seperti yang ditunjukkan diagram ini. Meskipun tidak umum saat ini dan tidak didukung oleh codec gambar asli, beberapa format gambar juga dapat mendukung metadata di luar bingkai gambar. WIC cukup fleksibel untuk menangani metadata tingkat bingkai dan metadata di luar bingkai individual gambar.

Membaca Metadata Gambar

API WIC menyediakan komponen COM yang memudahkan aplikasi untuk membaca dan menulis metadata gambar.

Cara utama untuk membaca metadata adalah dengan menggunakan pembaca kueri metadata (IWICMetadataQueryReader) untuk mengakses item metadata tertentu. Komponen pembaca kueri metadata diimplementasikan oleh codec dan dapat diakses pada tingkat dekoder atau melalui bingkai gambar individual, yang merupakan metode yang lebih umum. Kode berikut menunjukkan cara mengakses pembaca kueri untuk bingkai individual dengan menggunakan metode GetMetadataQueryReader pembaca kueri.

// Get the query reader
if (SUCCEEDED(hr))
{
    hr = pFrameDecode->GetMetadataQueryReader(&pQueryReader);
}

Pembaca kueri menyediakan metode untuk mendapatkan informasi tentang metadata tertentu, dan sarana untuk menentukan item metadata yang akan diambil. Kode berikut menggunakan ekspresi kueri untuk meminta item metadata tertentu dalam blok direktori file gambar berlapis (IFD) App1. Ini dilakukan dengan menggunakan metode GetMetadataByName pembaca kueri. Kode berikut menunjukkan penggunaan pembaca kueri untuk mendapatkan nilai peringkat MicrosoftPhoto.

PROPVARIANT value;
PropVariantInit(&value);

LPCWSTR pwzRatingQuery = L"/app1/ifd/{ushort=18249}";

if (SUCCEEDED(hr))
{
    hr = pQueryReader->GetMetadataByName(pwzRatingQuery, &value);
}

Variabel pwzRatingQuery dalam contoh sebelumnya adalah string kueri untuk mengakses item metadata peringkat MicrosoftPhoto. String ini dibuat dengan menggunakan bahasa kueri metadata. Untuk membuat string ini, pengetahuan tentang format metadata dan bahasa kueri metadata diperlukan untuk mengambil item metadata individual. Untuk informasi selengkapnya tentang bahasa kueri metadata, lihat Gambaran Umum Bahasa Kueri Metadata.

Di balik layar, pembaca kueri menggunakan pembaca metadata (IWICMetadataReader) untuk mengakses metadata yang dijelaskan oleh ekspresi kueri. Selain menggunakan pembaca kueri, Anda juga dapat mengakses pembaca metadata secara langsung untuk membaca metadata. Anda dapat memperoleh pembaca metadata dari dekoder atau bingkai individual dengan mengkueri antarmuka pembaca blok (IWICMetadataBlockReader).

Menulis Metadata Gambar

Proses penulisan metadata mirip dengan cara membacanya kecuali bahwa penulis kueri metadata (IWICMetadataQueryWriter) digunakan. Antarmuka penulis kueri diimplementasikan oleh encoder gambar dan, seperti dalam pembaca kueri, metadata diakses baik pada encoder maupun pada bingkai individual (tergantung pada dukungan format gambar).

Kode berikut menunjukkan cara mendapatkan penulis kueri dari bingkai encoder dan menghapus nilai peringkat yang sebelumnya dibaca.

// Get the frame's query writer
if (SUCCEEDED(hr))
{
    hr = pFrameEncode->GetMetadataQueryWriter(&pFrameQWriter);
}

if (SUCCEEDED(hr))
{
    hr = pFrameQWriter->RemoveMetadataByName(L"/app1/ifd/{ushort=18249}");
}

Cara lain untuk menulis metadata adalah melalui pembaruan metadata cepat. Pengodean metadata cepat adalah cara untuk menulis metadata gambar tanpa harus mengodekan ulang file gambar. Ini dilakukan dengan menulis informasi metadata baru ke wilayah berlapis dari format metadata. Encoder metadata cepat (IWICFastMetadataEncoder) diperoleh dari pabrik komponen, berdasarkan dekoder gambar. Encoder metadata cepat kemudian mendapatkan penulis kueri yang digunakan untuk menulis metadata. Akhirnya, encoder cepat melakukan perubahan.

Kode berikut menunjukkan cara mendapatkan encoder metadata cepat dan menggunakannya untuk menulis nilai MicrosoftRating.

if (SUCCEEDED(hr))
{
    IWICFastMetadataEncoder *pFME = NULL;
    IWICMetadataQueryWriter *pFMEQW = NULL;

    hr = pFactory->CreateFastMetadataEncoderFromFrameDecode(
        pFrameDecode,
        &pFME);

    if (SUCCEEDED(hr))
    {
        hr = pFME->GetMetadataQueryWriter(&pFMEQW);
    }

    if (SUCCEEDED(hr))
    {
        // Add additional metadata
        PROPVARIANT value;

        PropVariantInit(&value);

        value.vt = VT_UI4;
        value.uiVal = 99;
        hr = pFMEQW->SetMetadataByName(L"/app1/ifd/{ushort=18249}", &value);

        PropVariantClear(&value);
    }

    if (SUCCEEDED(hr))
    {
        hr = pFME->Commit();
    }
}

Tidak semua format metadata mendukung metadata cepat. Untuk melihat format mana yang didukung secara asli yang mendukung pengodean metadata cepat, lihat tabel di bagian Format Metadata yang Didukung nanti dalam dokumen ini.

Di balik layar, penulis kueri menggunakan penulis metadata (IWICMetadataWriter) untuk menulis metadata yang dijelaskan oleh ekspresi kueri. Selain menggunakan pembaca kueri, Anda juga dapat mengakses penulis metadata secara langsung untuk menulis metadata. Anda dapat memperoleh penulis metadata dari dekoder atau bingkai individual menggunakan kueri untuk antarmuka penulis blok (IWICMetadataBlockWriter).

Ekstensibilitas Metadata

Seperti disebutkan sebelumnya, WIC menyediakan beberapa penangan metadata untuk membaca dan menulis metadata untuk format metadata umum. Namun, ada beberapa format metadata yang tidak didukung secara asli. Oleh karena itu, WIC menyediakan API untuk membuat penangan metadata tambahan yang dapat memperluas dukungan metadata ke format lain.

Untuk sepenuhnya mendukung format metadata lainnya, dua jenis penangan harus dikembangkan — pembaca metadata untuk membaca metadata dan penulis metadata untuk menulis metadata. Meskipun kedua handler ini biasanya diimplementasikan berpasangan untuk format tertentu, itu bukan persyaratan. Mungkin ada beberapa kasus di mana hanya kemampuan baca atau hanya kemampuan tulis yang diperlukan.

Untuk informasi selengkapnya tentang ekstensibilitas metadata menggunakan API WIC, lihat Gambaran Umum Ekstensibilitas Metadata.

Format Metadata yang Didukung

WIC menyediakan dukungan untuk beberapa format metadata umum. Tabel berikut mencantumkan format metadata yang didukung, versinya, format gambar yang mendukung format metadata, dan apakah format metadata mendukung pengodean metadata cepat. Untuk informasi selengkapnya tentang pengodean metadata cepat, lihat bagian Menulis Metadata Gambar sebelumnya di dokumen ini.

Format metadata yang didukung Versi spesifikasi metadata Dukungan format gambar Mendukung pengodean metadata cepat
App0 JFIF 1.02 JPEG Tidak
App1 JFIF 1.02 JPEG, TIFF Tidak
App13 Tidak dikenal JPEG, TIFF Tidak
IFD TIFF 6.0 JPEG, TIFF Ya
IRB Tidak dikenal JPEG, TIFF Tidak
Exif Exif 2.2 JPEG, TIFF Ya
XMP XMP 1.0 (September 2005) JPEG, TIFF Ya
GPS Exif 2.2 JPEG, TIFF Ya
IPTC IPTC 4.0 JPEG, TIFF Ya
Teks PNG 1.2 PNG Tidak

 

Catatan

IPTC hanya mendukung FME jika blok tumbuh dalam ukuran, karena IPTC tidak mendukung padding.

 

Ringkasan Komponen Metadata

Tabel berikut menjelaskan antarmuka WIC yang mendukung metadata, dan komponen yang sesuai. Komponen-komponen ini menyediakan akses ke metadata gambar. Untuk informasi selengkapnya tentang komponen ini, lihat Gambaran Umum Komponen Pencitraan Windows.

Komponen Deskripsi
Bitmap Decoder (IWICBitmapDecoder)
  • Membaca aliran gambar dan menghasilkan sumber bitmap yang dapat digunakan. Terkait dengan format kontainer seperti Tagged Image File Format (TIFF) atau Joint Photographic Experts Group (JPEG).
  • Mengimplementasikan antarmuka IWICMetadataBlockReader untuk menghitung semua blok metadata dalam aliran data decoder yang tidak berada di dalam bingkai.
  • Mengekspos pembaca kueri untuk membaca metadata yang terkait dengan gambar yang tidak ada di dalam bingkai.
Dekode Bingkai Bitmap (IWICBitmapFrameDecode)
  • Mengakses bingkai individual dari aliran gambar yang dipegang oleh dekoder.
  • Mengimplementasikan antarmuka IWICMetadataBlockReader untuk menghitung semua blok metadata dalam aliran data bingkai.
  • Mengekspos pembaca kueri untuk membaca metadata yang terkait dengan bingkai, menggunakan ekspresi kueri.
Bitmap Encoder (IWICBitmapEncoder)
  • Menulis sumber bitmap ke aliran gambar. Terkait dengan format kontainer seperti TIFF atau JPEG.
  • Mengimplementasikan antarmuka IWICMetadataBlockWriter untuk membangun daftar blok metadata untuk ditulis ke dalam aliran data encoder.
  • Mengekspos penulis kueri untuk menulis metadata yang terkait dengan gambar, menggunakan ekspresi kueri.
Bitma Frame Encode (IWICBitmapFrameEncode)
  • Membuat bingkai yang akan dikodekan ke dalam aliran yang dipegang oleh encoder.
  • Mengimplementasikan antarmuka IWICMetadataBlockWriter untuk membangun daftar blok metadata untuk ditulis ke dalam aliran data bingkai.
  • Mengekspos penulis kueri untuk menulis metadata yang terkait dengan bingkai, menggunakan ekspresi kueri.

 

Tabel berikut ini menjelaskan komponen metadata WIC. Komponen-komponen ini memungkinkan Anda membaca dan menulis metadata dalam gambar yang diekspos oleh komponen yang tercantum dalam tabel sebelumnya.

Komponen Deskripsi
Pembaca Kueri Metadata (IWICMetadataQueryReader)
  • Mengambil string kueri dan menavigasi hierarki metadata yang mendasar untuk mendapatkan metadata.
Penulis Kueri Metadata (IWICMetadataQueryWriter)
  • Mengambil string kueri dan menavigasi hierarki metadata yang mendasar untuk mendapatkan, mengatur, dan menghapus metadata.
Pembaca Blok Metadata (IWICMetadataBlockReader)
  • Mengelola kumpulan objek IWICMetadataReader baca-saja di bagian atas hierarki metadata dan memungkinkan enumerasi semua blok metadata.
  • Diimplementasikan oleh dekoder bitmap dan bingkai bitmap yang didekodekan.
  • Diimplementasikan oleh pengembang komponen pihak ketiga untuk codec kustom.
Metadata Block Writer (IWICMetadataBlockWriter)
  • Mengelola koleksi baca dan tulis objek IWICMetadataWriter di bagian atas hierarki metadata.
  • Diimplementasikan oleh encoder bitmap dan encode bingkai bitmap.
  • Diimplementasikan oleh pengembang komponen pihak ketiga untuk codec kustom.
Pembaca Metadata (IWICMetadataReader)
  • Mengurai aliran metadata dan mengelola kumpulan item metadata baca-saja. Terkait dengan format metadata seperti EXIF, IFD, dan XMP.
  • Bertindak sebagai kamus, mengembalikan nilai saat diberi format dan pasangan ID.
  • Diimplementasikan oleh pengembang komponen pihak ketiga untuk jenis metadata kustom.
Penulis Metadata (IWICMetadataWriter)
  • Mengurai dan menserialisasikan aliran metadata dan mengelola kumpulan baca/tulis item metadata.
  • Diimplementasikan oleh pengembang komponen pihak ketiga untuk jenis metadata kustom.
Encoder Metadata CepatIWICFastMetadataEncoder
  • Mengekspos semantik untuk menulis pada hierarki metadata yang akan memperbarui metadata di tempat tanpa mengodekan ulang gambar.

 

Konseptual

Gambaran Umum Komponen Pencitraan Windows

Gambaran Umum Bahasa Kueri Metadata

Gambaran Umum Membaca dan Menulis Metadata Gambar

Gambaran Umum Ekstensibilitas Metadata

Cara: Mengodekan ulang Gambar JPEG dengan Metadata