Gambaran Umum Metadata WIC
Topik ini memperkenalkan dukungan metadata pencitraan yang disediakan oleh Komponen Pencitraan Windows (WIC). Ini memberikan pengenalan tentang membaca dan menulis metadata gambar, bahasa kueri metadata, dan pengendalian ekstensibilitas 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
- Pengenalan
- Membaca Metadata Gambar
- Penulisan Metadata Gambar
- Ekstensibilitas Metadata
- Format Metadata yang Didukung
- Ringkasan Komponen Metadata
- Topik terkait
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.
Perkenalan
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, Galeri Foto Windows 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.
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 dari 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 dari 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 frame individu dengan melakukan kueri untuk 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, dengan berdasarkan pada dekoder gambar. Encoder metadata yang cepat kemudian mendapatkan pembuat kueri yang digunakan untuk menulis metadata. Akhirnya, encoder cepat mengonfirmasi 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 penulis blok (antarmuka 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 handler metadata tambahan yang dapat memperluas dukungan metadata ke format lain.
Untuk sepenuhnya mendukung format metadata lainnya, dua jenis handler 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 dalam 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 Diketahui | JPEG, TIFF | Tidak |
IFD | TIFF 6.0 | JPEG, TIFF | Ya |
IRB | Tidak Diketahui | JPEG, TIFF | Tidak |
Exif | Exif 2.2 | JPEG, TIFF | Ya |
XMP | XMP 1.0 (Sep 2005) | JPEG, TIFF | Ya |
GPS | Exif 2.2 | JPEG, TIFF | Ya |
IPTC | IPTC 4.0 | JPEG, TIFF | Ya |
TEKS | PNG 1.2 | PNG | Tidak |
Nota
IPTC hanya mendukung FME jika blok bertambah besar, karena IPTC tidak bisa menambahkan 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) |
|
Dekode Bingkai Bitmap (IWICBitmapFrameDecode) |
|
Bitmap Encoder (IWICBitmapEncoder) |
|
Bitma Frame Encode (IWICBitmapFrameEncode) |
|
Tabel berikut 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) |
|
Penulis Kueri Metadata (IWICMetadataQueryWriter) |
|
Pembaca Blok Metadata (IWICMetadataBlockReader) |
|
Metadata Block Writer (IWICMetadataBlockWriter) |
|
Pembaca Metadata (IWICMetadataReader) |
|
Penulis Metadata (IWICMetadataWriter) |
|
Encoder Metadata CepatIWICFastMetadataEncoder |
|
Topik terkait
-
Konseptual