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
- Pendahuluan
- Membaca Metadata Gambar
- Menulis 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.
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.
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) |
|
Dekode Bingkai Bitmap (IWICBitmapFrameDecode) |
|
Bitmap Encoder (IWICBitmapEncoder) |
|
Bitma Frame Encode (IWICBitmapFrameEncode) |
|
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) |
|
Penulis Kueri Metadata (IWICMetadataQueryWriter) |
|
Pembaca Blok Metadata (IWICMetadataBlockReader) |
|
Metadata Block Writer (IWICMetadataBlockWriter) |
|
Pembaca Metadata (IWICMetadataReader) |
|
Penulis Metadata (IWICMetadataWriter) |
|
Encoder Metadata CepatIWICFastMetadataEncoder |
|
Topik terkait
-
Konseptual