Exif 2.1 and Tiff 6.0 support.
For 3.2 images, use the following version (tested on Squeak 3.2gamma5): http://www.swerlingphoto.com/squeak/exifreader/spsExifReader.3.2.v1.cs.gz
For 3.3 images, use the following version (tested on Squeak 3.3a-4914): http://www.swerlingphoto.com/squeak/exifreader/spsExifReader.3.3.v1.cs.gz
This changeset provides code for reading Exif data out of Exif 2.1 compliant image files. Both little and bigEndian files are supported. Also included are a set of classes for reading Tiff 6.0 IFDs, which is a requirement of Exif 2.1 (again, both little and bigEndian files are supported). An ExifViewer is provided to browse exif data and view the exif thumbnail if possible.
This code was designed so that support can be added for specific cameras that augment their Exif data with specialized information -- an example is provided for files generated by the Nikon D1x. If you wish to add support for information specific to your Exif 2.1 compliant digital camera, take a look at how it was done for the NikonD1xExifReader. There is a facility for diffing IFDs in ExifImageInfoReader, which may come in handy if you are trying to crack the encoding for your camera (see the "diff" class protocol).
Please note that few cameras more than 1 or 2 years old have Exif 2.1 compliant data, and that even among newer models, Exif 2.1 compliance is often incomplete or erroneous.
Not supported this version: float IFD Field values. double IFD Field values. reading IPTC data reading audio Exif Data (anyone got any sample files?).
If you have an Exif image file that contains fields with float or double values, I would appreciate it if you could make the file available to me by posting it on the www and mailing me a link (I don't have high speed internet access, so please don't email it). Also, if you have a file that can't be read by this code, but can be read by other exif readers, or if you have a file that is incorrectly read by this code, I would appreciate it if you could make that file available to me.
To open an ExifViewer, try: ExifViewer openMorphicViewInWorld.