Add JPG Metadata
Add or edit EXIF metadata in JPG files client-side. Set artist, copyright, GPS coordinates, date, camera info, and description without re-encoding.
About
JPEG files carry metadata in APP1 (EXIF) segments defined by the TIFF 6.0 and EXIF 2.32 specifications. Stripping or corrupting this data during editing causes loss of authorship proof, GPS provenance, and timestamp chains critical for legal evidence, stock photography licensing, and digital forensics. This tool injects a standards-compliant EXIF IFD structure directly into the JPEG binary stream without re-encoding pixel data, so image quality remains at 100%. Fields follow the tag IDs from the EXIF specification: tag 0x013B for Artist, tag 0x8298 for Copyright, and the GPS IFD for coordinates encoded as rational degree-minute-second triples.
Limitation: this tool builds a new APP1 segment and replaces any existing one. Existing EXIF data (including embedded thumbnails and maker notes) will be overwritten. If you need to preserve existing tags while adding new ones, a full round-trip parser is required. Processing is entirely client-side; no image data leaves your browser.
Formulas
GPS coordinates are stored as three RATIONAL values representing degrees, minutes, and seconds. Each RATIONAL is a pair of 32-bit unsigned integers (numerator and denominator).
Where D = degrees (integer), M = minutes (integer), S = seconds (may include fractional part). The tool converts a decimal coordinate like 48.8566 into the DMS rational triple stored in the EXIF GPS IFD.
The inverse conversion used internally:
M = floor((|decimal| − D) × 60)
S = ((|decimal| − D − M60) × 3600) × 1000
Seconds are multiplied by 1000 and stored as rational Sint1000 to preserve three decimal places of precision, yielding positional accuracy of approximately 0.11m.
EXIF RATIONAL type structure per value:
Reference Data
| EXIF Tag | Tag ID | IFD | Type | Description |
|---|---|---|---|---|
| ImageDescription | 0x010E | IFD0 | ASCII | Caption or description of the image content |
| Make | 0x010F | IFD0 | ASCII | Camera manufacturer name |
| Model | 0x0110 | IFD0 | ASCII | Camera model identifier |
| Software | 0x0131 | IFD0 | ASCII | Software used to create or process the image |
| Artist | 0x013B | IFD0 | ASCII | Photographer or creator name |
| Copyright | 0x8298 | IFD0 | ASCII | Copyright notice string |
| DateTime | 0x0132 | IFD0 | ASCII | File modification date (YYYY:MM:DD HH:MM:SS) |
| DateTimeOriginal | 0x9003 | Exif IFD | ASCII | Date the original image was captured |
| UserComment | 0x9286 | Exif IFD | UNDEFINED | Free-form user comment (ASCII charset prefix) |
| GPSLatitudeRef | 0x0001 | GPS IFD | ASCII | N or S hemisphere indicator |
| GPSLatitude | 0x0002 | GPS IFD | RATIONAL ×3 | Latitude as degrees, minutes, seconds rationals |
| GPSLongitudeRef | 0x0003 | GPS IFD | ASCII | E or W hemisphere indicator |
| GPSLongitude | 0x0004 | GPS IFD | RATIONAL ×3 | Longitude as degrees, minutes, seconds rationals |
| GPSAltitudeRef | 0x0005 | GPS IFD | BYTE | 0 = above sea level, 1 = below |
| GPSAltitude | 0x0006 | GPS IFD | RATIONAL | Altitude in meters as unsigned rational |
| ExifIFDPointer | 0x8769 | IFD0 | LONG | Offset pointer to Exif Sub-IFD |
| GPSInfoIFDPointer | 0x8825 | IFD0 | LONG | Offset pointer to GPS IFD |
| ExifVersion | 0x9000 | Exif IFD | UNDEFINED | EXIF version, typically 0232 |
| ColorSpace | 0xA001 | Exif IFD | SHORT | 1 = sRGB, 65535 = Uncalibrated |