The ExifInfo REALBasic Class will extract Exif, IPTC and XMP metadata (data about data) from a JPEG, TIFF or PSD image file. Exif (Exchangeable Image File Format) metadata is held in the same format as is used in TIFF files to hold metadata relating to the TIFF image - e.g. resolution, colour information and pointers into the image itself. Exif data is also added to the JPEG in Digital Photos and provides camera data such as exposure. IPTC (International Press Telecommunications Council) metadata is often added by editing applications such as Photoshop, IfranView and PixVue to document the image - e.g. with a description, title, etc. XMP (Adobe's Extensible Metadata Platform) is a metadata format based on XML and though a replacement for Exif, it is largely maintained in parallel. ExifInfo has been tested using images from Fuji, Casio, Sony, Panasonic and Ricoh cameras (and some others). It has also been tested with metadata created by Photoshop, IfranView and PixVue (IfranView and PixVue are Freeware software used to handle and document image files). Method - ProcessFile(f as folderitem) Properties set by ProcessFile - ExifError - Error message (Blank if valid Exif Data is found) IPTCError - Error message (Blank if valid IPTC Data is found) ExifDict - Dictionary of Exif data (ExifDict.Count=0 if no Exif data found). ExifDict.Key(Index) is a desription of the data item (e.g. "ApertureValue") ExifDict.Value(Key) is a string showing the formatted data value (raw data is avable within the code if needed) IPTCDict - Dictionary of IPTC data (IPTC.Dict.Count=0 if no IPTC data found) IPTCDict.Key(Index) is a description of the data item using IPTC terms (e.g. "Caption/Abstract") (N.B. These are not always the same as used (e.g.) in Photoshop - "Caption/Abstract" would be "Description" in Pshop) IPTCDict.Value(Key) is a string showing the text of the data item XMPMetadata - XMP data as a string. DebugData - String giving more details of data - see code if necessary to interpret further. Example - Process(f as FolderItem) Dim EX as ExifInfo Dim i as Integer if f <> nil then EX = new ExifInfo EX.ProcessFile(f) if EX.ExifDict<>Nil Then for i=0 to EX.ExifDict.Count-1 ListBox1.AddRow(EX.ExifDict.Key(i)) ListBox1.Cell(ListBox1.LastIndex,1)=EX.ExifDict.Value(EX.ExifDict.Key(i)) next end if EX.IPTCDict<>Nil Then for i=0 to EX.IPTCDict.Count-1 ListBox2.AddRow(EX.IPTCDict.Key(i)) ListBox2.Cell(ListBox2.LastIndex,1)=EX.IPTCDict.Value(EX.IPTCDict.Key(i)) next end end if Not all Exif and IPTC data is interpreted into the Dictionaries, but other details may be seen in the DebugData. If necessary, the code could be amended to interpret/format further data, or to remove the debugging code. In Exif data, some 'tags' hold multiple values and these are either interpreted or extracted as numeric values separated by commas ",". The metadata is taken from various structures within the different files and it is possible that the same 'tag' is present in several places. Generally the data in these different places holds the same value, but in a few cases it may differ. If so, both values are extracted and are separated by a colon ";". This happens in IPTC data where a file may hold a number of Keywords. Having checked the three ways I use of editting such metadata, they vary in what they maintain - e.g. The image Description/Caption can be held in three places ... - The Photoshop block used by IPTC - The XMP metadata, and - Tags added to the Exif data. Photohop CS (in the File Browser) reads from the XMP data, and sets data in all three locations. IfranView (via the IPTC Plugin) reads from the IPTC data and only sets the IPTC data. PixVue (in Annotate/Edit) reads from the IPTC data and sets the IPTC data and XMP data. In other contexts (e.g. the Tag displayed when you hover over a file) PixVue shows the XMP value! (If any of this doesn't make sense, you may need to find out more about the format of the data (e.g. via Google) or just get out and enjoy life instead.) ExifInfo is offered on an as-is basis with no warranties, promises or documentation. Enjoy, plagiarise, and/or hack as you see fit, but don't blame me! It works to my satisafction. Adrian Middleton (www.middlea.freeserve.co.uk)