| Basic Editing of Photo Metadata Using Windows Imaging Component by Ben Vincent |
In my previous posts I’ve provided examples on using Windows Imaging Component to Read & Write jpg metadata. In this post I’ll explain how to use ContainsQuery, GetQuery, SetQuery and RemoveQuery. As an added bonus I’m going to use the IPTC address fields as my example. Whilst BitmapMetadata does provide some standard properties like Subject and Title, it is far from comprehensive. In order to get at the other data you have to provide the right query. For me this has been one of the most frustrating challenges because these queries are not what you’d call logical. I’m going use a few basic queries in this post but I will be posting all the queries I use in a later post. These four queries give you access to the Country, Region, City and SubLocation IPTC tags. | // Queries for the IPTC Address fields // Note: Region is normally the State or County string iptcCountry = @"/app13/irb/8bimiptc/iptc/Country\/Primary Location Name"; string iptcRegion = @"/app13/irb/8bimiptc/iptc/Province\/State"; string iptcCity = @"/app13/irb/8bimiptc/iptc/City"; string iptcSubLocation = @"/app13/irb/8bimiptc/iptc/Sub-location"; | Now let’s start with ContainsQuery and GetQuery which form the basics of your use of the BitmapMetadata class. In this example we query the BitmapMetadata object for the IPTC City. First we read the file, then check the file contains data for the IPTC City and if it does write it to the debug console: | // Grab copy of BitmapMetadata BitmapMetadata bitmapMetadata = StandaloneWpfReader.ReadMetadata(inputFile); // Check there's city data if (bitmapMetadata.ContainsQuery(iptcCity)) { // Dump it to the console Debug.WriteLine(bitmapMetadata.GetQuery(iptcCity)); } | That code provides the core of manipulating the file. Now lets deal with SetQuery: | // Grab copy of BitmapMetadata and add Padding BitmapMetadata bitmapMetadata = this.ReadMetadata("TestInput.jpg"); StandaloneWpfReader.AddMetadataPadding(bitmapMetadata, 5012); // Use SetQuery to store the IPTC Address fields bitmapMetadata.SetQuery(iptcCity, "IPTC City"); bitmapMetadata.SetQuery(iptcCountry, "IPTC Country"); bitmapMetadata.SetQuery(iptcRegion, "IPTC Region"); bitmapMetadata.SetQuery(iptcSubLocation, "IPTC SubLocation"); // Save the new file this.WriteMetadata("TestInput.jpg", "TestOutput.jpg", bitmapMetadata); | And finally, the pretty obvious RemoveQuery, were we’ll remove the data we’ve just added: | // Remove IPTC Address fields bitmapMetadata.RemoveQuery(iptcCity); bitmapMetadata.RemoveQuery(iptcCountry); bitmapMetadata.RemoveQuery(iptcRegion); bitmapMetadata.RemoveQuery(iptcSubLocation); | That’s it for the basic manipulation, in future blogs I’ll build on this to explain how to work with more complicated metadata. |
|
|
| Posted: Thu, 5 Nov 2009, 05:09:10 GMT (Updated: Thu, 5 Nov 2009, 05:25:28 GMT) by Ben Vincent | 0 Comments |
| Category: Development |
| Tags: Windows Imaging Component, XMP, Exif, IPTC, FotoFly |
|
| |