Skip to content

Commit 7580e47

Browse files
CopilotHexagon
andauthored
[WIP] Ensure HEIC and AVIF have consistent metadata extraction (#63)
* Initial plan * Enhanced HEIC and AVIF metadata extraction to match other formats Added comprehensive EXIF parsing including: - IFD0 tags: description, author, copyright - Exif Sub-IFD tags: flash, whiteBalance, lensMake, lensModel, userComment - GPS IFD: full latitude/longitude parsing - Updated field count from 11 to 19 fields in both formats - Updated README and documentation to reflect enhanced support Co-authored-by: Hexagon <419737+Hexagon@users.noreply.github.com> * Add safety bounds checks to EXIF parsing loops - Added upper bounds (100 entries max) to parseExifSubIFD loops in HEIC and AVIF - Added upper bounds (100 entries max) to parseGPSIFD loops in HEIC and AVIF - Prevents excessive iterations with malformed EXIF data Co-authored-by: Hexagon <419737+Hexagon@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Hexagon <419737+Hexagon@users.noreply.github.com>
1 parent 3b6e0bc commit 7580e47

6 files changed

Lines changed: 970 additions & 18 deletions

File tree

README.md

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -255,8 +255,8 @@ Image.getSupportedMetadata("jpeg"); // Full camera metadata + GPS (21 fields)
255255
Image.getSupportedMetadata("tiff"); // Comprehensive EXIF + GPS + InteropIFD (23+ fields)
256256
Image.getSupportedMetadata("png"); // DateTime, GPS, DPI, basic text (9 fields)
257257
Image.getSupportedMetadata("webp"); // Enhanced XMP + GPS (15 fields - includes camera metadata!)
258-
Image.getSupportedMetadata("heic"); // Camera metadata + GPS (11 fields)
259-
Image.getSupportedMetadata("avif"); // Camera metadata + GPS (11 fields)
258+
Image.getSupportedMetadata("heic"); // Full camera metadata + GPS (19 fields)
259+
Image.getSupportedMetadata("avif"); // Full camera metadata + GPS (19 fields)
260260
```
261261

262262
**Format Highlights:**
@@ -267,8 +267,10 @@ Image.getSupportedMetadata("avif"); // Camera metadata + GPS (11 fields)
267267
- **WebP**: Enhanced XMP implementation with Dublin Core, EXIF, and TIFF
268268
namespaces
269269
- **PNG**: Basic EXIF support via eXIf chunk plus GPS coordinates
270-
- **HEIC**: Camera metadata and GPS extraction (runtime-dependent encoding)
271-
- **AVIF**: Camera metadata and GPS extraction (runtime-dependent encoding)
270+
- **HEIC**: Full EXIF metadata extraction including camera settings, GPS, and
271+
image info (runtime-dependent encoding)
272+
- **AVIF**: Full EXIF metadata extraction including camera settings, GPS, and
273+
image info (runtime-dependent encoding)
272274

273275
## Documentation
274276

docs/src/metadata.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -156,23 +156,23 @@ const pngFields = Image.getSupportedMetadata("png");
156156

157157
// Check HEIC support
158158
const heicFields = Image.getSupportedMetadata("heic");
159-
// HEIC supports camera metadata and GPS (11 fields)
159+
// HEIC supports full camera metadata and GPS (19 fields)
160160

161161
// Check AVIF support
162162
const avifFields = Image.getSupportedMetadata("avif");
163-
// AVIF supports camera metadata and GPS (11 fields)
163+
// AVIF supports full camera metadata and GPS (19 fields)
164164
```
165165

166166
### Format Comparison
167167

168-
| Format | Fields | Implementation |
169-
| -------- | ------ | ----------------------------------------- |
170-
| **JPEG** | 21 | Full EXIF (IFD0 + Exif Sub-IFD + GPS IFD) |
171-
| **TIFF** | 23+ | Complete EXIF 3.0 support with InteropIFD |
172-
| **WebP** | 15 | EXIF DateTime/GPS + Enhanced XMP |
173-
| **PNG** | 9 | eXIf chunk + pHYs + tEXt chunks |
174-
| **HEIC** | 11 | EXIF metadata extraction (runtime-based) |
175-
| **AVIF** | 11 | EXIF metadata extraction (runtime-based) |
168+
| Format | Fields | Implementation |
169+
| -------- | ------ | --------------------------------------------------------- |
170+
| **JPEG** | 21 | Full EXIF (IFD0 + Exif Sub-IFD + GPS IFD) |
171+
| **TIFF** | 23+ | Complete EXIF 3.0 support with InteropIFD |
172+
| **HEIC** | 19 | Full EXIF metadata extraction (IFD0 + Exif Sub-IFD + GPS) |
173+
| **AVIF** | 19 | Full EXIF metadata extraction (IFD0 + Exif Sub-IFD + GPS) |
174+
| **WebP** | 15 | EXIF DateTime/GPS + Enhanced XMP |
175+
| **PNG** | 9 | eXIf chunk + pHYs + tEXt chunks |
176176

177177
## EXIF 3.0 Specification Compliance
178178

0 commit comments

Comments
 (0)