General Information
"Metadata" refers to extra information that is stored with an image, but is not necessary for decoding the image. It can contain information about the camera used to take the image, the author, date and time the image was taken, where the image was taken, whether the camera has GPS capabilities, etc. When an image is modified, you should preserve the original information, if possible. Metadata includes markers, tags and comments. This topic will deal primarily with markers. For more information on tags and comments, refer to the following:
Implementing TIFF Comments and Tags
Working with Markers
JPEG files contain metadata information in user-defined markers. The user-defined markers are in the range 0xE0 to 0xFE. These markers can have a maximum size of 0xFFFD, or 65533 bytes. The markers below 0xE0 are reserved for the encoding of the image and inserting a reserved marker can make a file invalid. Therefore, you should not use reserved markers unless you are well acquainted with markers and image encoding in JPEG files.
TIFF files do not contain markers, however, LEADTOOLS provides a "workaround" for transferring Exif comments from JPEG files to TIFF files, and vice versa. The Exif metadata information from a TIFF file will be loaded as an APP1 marker. Therefore, you can load Exif metadata from an uncompressed file and store it in a compressed Exif file. You can also take metadata information from a compressed Exif file and store it in an uncompressed Exif file. Please note however, that some information cannot be stored inside uncompressed Exif files. For example, audio data is stored in APP2 markers and there is no built-in support for saving APP2 markers in TIFF files. However, you can still save the audio data yourself, using a custom tag. For more information on saving custom tags, refer to Implementing TIFF Comments and Tags.
Handling Markers
LEADTOOLS provides several methods for loading, creating, setting, modifying, getting information from and freeing markers.
To load markers (or enumerate available markers) from an existing JPEG file, call RasterCodecs.ReadMarkers. The resulting collection RasterCollection<RasterMarkerMetadata> contains all the markers from the file. Although TIFF files do not support markers, LEADTOOLS provides limited support through the use of APP1 Exif markers. When you call RasterCodecs.ReadMarkers for a TIFF file, an APP1 marker is created and all the TIFF, GPS and Exif comments will be stored in it. In addition, any other tag with an ID greater than 0x8000 (32768) will be stored in the APP1 marker. The other information will be considered as being useful only for the image and will not be loaded into the APP1 marker. The only exception is the resolution information, which will be loaded in the APP1 marker.
The RasterCollection<RasterMarkerMetadata> class lets you create a collection of markers from scratch. You can then add the created individual RasterMarkerMetadata with the RasterCollection<RasterMarkerMetadata>.Add method After you call RasterCollection<RasterMarkerMetadata>.Add once, you can call the RasterCodecs.ReadMarkers(Stream) method.
Markers, like tags and comments can be set directly in the image, every image has a Markers collection that allows you to add, remove, insert, clear, get and set. so that when a file is saved using the RasterCodecs.Save method, the markers, tags and/or comments that have been set will be saved too.
Markers also are written to files using the RasterCodecs.WriteComments and RasterCodecs.WriteTag methods. The comments or tags being written by these two methods will overwrite any similar comments or tags contained in the markers. To summarize:
This method: | will write this type of data |
Comments and Markers | |
RasterCodecs.WriteTag | Tags and Markers |
Markers are generally modified by deleting all markers of a certain type. To delete a marker use the RasterCollection<RasterMarkerMetadata>.Remove method.
The RasterCodecs.ReadMarkers method can be used to enumerate and modify a marker collection.
To determine how many markers are in a collection, use the Leadtools.RasterCollection<T>.Count property.
Finally, to create a copy of a marker collection and obtain a handle to the new marker collection, use the Leadtools.RasterCollection<T>.CopyTo method.