6.1 KiB
6.1 KiB
@suaveplan/exif - Dependency-free, runtime-agnostic EXIF/XMP/IPTC metadata reader, writer, and stripper for JPEG and PNG images
Dependency-free, runtime-agnostic EXIF/XMP/IPTC metadata reader, writer, and stripper for JPEG and PNG images. Parses JPEG segment chains to locate and decode the EXIF IFD (TIFF byte-order aware, including GPS and SubIFD), IPTC IIM (caption, keywords, copyright), and XMP Dublin Core (raw XML string extraction). Writes back a revised EXIF IFD without re-encoding the image pixels, and strips all metadata segments for privacy-preserving image export. Includes a ByteReader/ByteWriter pair with rational arithmetic helpers and CRC-32 for PNG chunks.
Documentation tree
- crc32 — (no submodules)
- crc32 — (no submodules)
- rational — (no submodules)
- rational — (no submodules)
- reader — (no submodules)
- byte-reader — (no submodules)
- writer — (no submodules)
- byte-writer — (no submodules)
- read-metadata — The main entry point for reading image metadata. Orchestrates format detection, JPEG segment parsing, and EXIF/XMP/IPTC…
- strip-metadata — Removes metadata segments from a JPEG image buffer and returns a clean image with only the pixel data intact. Privacy-s…
- write-metadata — Writes or updates EXIF metadata in a JPEG image buffer. Merges the provided patch over any existing EXIF data and rebui…
- errors — (no submodules)
- exif-error — (no submodules)
- exif — (no submodules)
- read-exif — (no submodules)
- format — (no submodules)
- detect — (no submodules)
- ifd — (no submodules)
- parse — (no submodules)
- iptc — (no submodules)
- read-iptc — (no submodules)
- jpeg — (no submodules)
- segments — (no submodules)
- xmp — (no submodules)
- read-xmp — (no submodules)
Installation
bun add @suaveplan/exif
Quick Start
import { readMetadata, writeMetadata, stripMetadata } from "@suaveplan/exif";
// Read all metadata
const meta = readMetadata(imageBuffer);
console.log(meta.format); // "jpeg"
console.log(meta.exif?.make); // "Canon"
console.log(meta.exif?.gps?.latitude);
// Write / update metadata
const updated = writeMetadata(imageBuffer, { orientation: 1, software: "My App" });
// Strip all metadata for privacy
const clean = stripMetadata(imageBuffer);
Modules
src/core/read-metadata.md— Main entry point for reading image metadatasrc/core/write-metadata.md— Write or update EXIF metadata in JPEG bufferssrc/core/strip-metadata.md— Remove metadata segments for privacy-safe exportsrc/binary/reader/byte-reader.md—ByteReaderwith endianness supportsrc/binary/writer/byte-writer.md—ByteWriterfor TIFF reconstructionsrc/binary/rational/rational.md— Rational number arithmetic helperssrc/binary/crc32/crc32.md— CRC-32 for PNG chunk validationsrc/format/detect.md— Magic-byte image format detectionsrc/jpeg/segments.md— JPEG segment chain parsingsrc/ifd/parse.md— TIFF IFD parsing (GPS, SubIFD)src/exif/read-exif.md— Raw EXIF/TIFF buffer parsingsrc/iptc/read-iptc.md— IPTC IIM caption/keywords/copyright parsingsrc/xmp/read-xmp.md— XMP Dublin Core raw XML extractionsrc/errors/exif-error.md—ExifErrorandEXIF_CODESregistry
Subpath Exports
| Subpath | Description |
|---|---|
@suaveplan/exif |
Main API: readMetadata, writeMetadata, stripMetadata |
@suaveplan/exif/binary |
ByteReader, ByteWriter, rational utilities, CRC-32 |
@suaveplan/exif/format |
detectImageFormat — magic byte detection |
@suaveplan/exif/exif |
readExifFromTiffBuffer — raw TIFF/EXIF parsing |
@suaveplan/exif/iptc |
readIptc — IPTC IIM parsing |
@suaveplan/exif/xmp |
readXmp — XMP Dublin Core parsing |
@suaveplan/exif/errors |
ExifError, EXIF_CODES |