@@ -124,6 +124,110 @@ See the
124124[ full format support documentation] ( https://cross-image.56k.guru/formats/ ) for
125125detailed compatibility information.
126126
127+ ## Metadata Support
128+
129+ @cross/image provides comprehensive EXIF 3.0 compliant metadata support for
130+ image files, including camera information, GPS coordinates, and InteropIFD
131+ compatibility markers.
132+
133+ ### Supported Metadata Fields
134+
135+ ** Basic Metadata:**
136+
137+ - ` title ` , ` description ` , ` author ` , ` copyright `
138+ - ` creationDate ` - Date/time image was created
139+
140+ ** Camera Settings (JPEG, TIFF, WebP via XMP):**
141+
142+ - ` cameraMake ` , ` cameraModel ` - Camera manufacturer and model
143+ - ` lensMake ` , ` lensModel ` - Lens information
144+ - ` iso ` - ISO speed rating
145+ - ` exposureTime ` - Shutter speed in seconds
146+ - ` fNumber ` - Aperture (f-number)
147+ - ` focalLength ` - Focal length in mm
148+ - ` flash ` , ` whiteBalance ` - Capture settings
149+ - ` orientation ` - Image orientation (1=normal, 3=180°, 6=90°CW, 8=90°CCW)
150+ - ` software ` - Software used
151+ - ` userComment ` - User notes
152+
153+ ** GPS Coordinates (All EXIF formats: JPEG, PNG, WebP, TIFF):**
154+
155+ - ` latitude ` , ` longitude ` - GPS coordinates in decimal degrees
156+ - Full microsecond precision with DMS (degrees-minutes-seconds) conversion
157+
158+ ** DPI (JPEG, PNG, TIFF):**
159+
160+ - ` dpiX ` , ` dpiY ` - Dots per inch for printing
161+
162+ ### EXIF 3.0 Specification Compliance
163+
164+ The library implements the EXIF 3.0 specification with:
165+
166+ - ** 50+ Exif Sub-IFD tags** for comprehensive camera metadata
167+ - ** 30+ IFD0 tags** for image information
168+ - ** InteropIFD support** for format compatibility (R98/sRGB, R03/Adobe RGB,
169+ THM/thumbnail)
170+ - ** GPS IFD** with proper coordinate conversion
171+ - All EXIF data types (BYTE, ASCII, SHORT, LONG, RATIONAL, etc.)
172+
173+ ### Example Usage
174+
175+ ``` typescript
176+ import { Image } from " @cross/image" ;
177+
178+ // Load an image
179+ const data = await Deno .readFile (" photo.jpg" );
180+ const image = await Image .decode (data );
181+
182+ // Set metadata
183+ image .setMetadata ({
184+ author: " Jane Photographer" ,
185+ copyright: " © 2024" ,
186+ cameraMake: " Canon" ,
187+ cameraModel: " EOS R5" ,
188+ iso: 800 ,
189+ exposureTime: 0.004 , // 1/250s
190+ fNumber: 2.8 ,
191+ focalLength: 50 ,
192+ });
193+
194+ // Set GPS coordinates
195+ image .setPosition (40.7128 , - 74.0060 ); // NYC
196+
197+ // Check what metadata a format supports
198+ const jpegSupports = Image .getSupportedMetadata (" jpeg" );
199+ console .log (jpegSupports ); // Includes ISO, camera info, GPS, etc.
200+
201+ // Save with metadata
202+ const jpeg = await image .save (" jpeg" );
203+ await Deno .writeFile (" output.jpg" , jpeg );
204+
205+ // Metadata is preserved on reload!
206+ const loaded = await Image .decode (jpeg );
207+ console .log (loaded .metadata ?.cameraMake ); // "Canon"
208+ console .log (loaded .getPosition ()); // { latitude: 40.7128, longitude: -74.0060 }
209+ ```
210+
211+ ### Format-Specific Support
212+
213+ Use ` Image.getSupportedMetadata(format) ` to check which fields are supported:
214+
215+ ``` typescript
216+ Image .getSupportedMetadata (" jpeg" ); // Full camera metadata + GPS (21 fields)
217+ Image .getSupportedMetadata (" tiff" ); // Comprehensive EXIF + GPS + InteropIFD (23+ fields)
218+ Image .getSupportedMetadata (" png" ); // DateTime, GPS, DPI, basic text (9 fields)
219+ Image .getSupportedMetadata (" webp" ); // Enhanced XMP + GPS (15 fields - includes camera metadata!)
220+ ```
221+
222+ ** Format Highlights:**
223+
224+ - ** JPEG** : Most comprehensive EXIF support, including all camera settings and
225+ GPS
226+ - ** TIFF** : Full EXIF 3.0 support with IFD structure, InteropIFD compatibility
227+ - ** WebP** : Enhanced XMP implementation with Dublin Core, EXIF, and TIFF
228+ namespaces
229+ - ** PNG** : Basic EXIF support via eXIf chunk plus GPS coordinates
230+
127231## Documentation
128232
129233- ** [ API Reference] ( https://cross-image.56k.guru/api/ ) ** - Complete API
0 commit comments