exif

package
v1.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 30, 2026 License: MIT Imports: 2 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Data

type Data struct {
	// AllFields contains all parsed EXIF tags as string key-value pairs
	AllFields map[string]string

	// Common camera/image metadata
	Make             *string  // Camera manufacturer
	Model            *string  // Camera model
	Software         *string  // Software used
	DateTime         *string  // File change date/time
	DateTimeOriginal *string  // Photo capture date/time
	ExposureTime     *string  // Exposure time (e.g., "1/125")
	FNumber          *float64 // F-number (aperture)
	ISO              *int     // ISO speed rating

	// GPS coordinates (decimal degrees)
	GPSLatitude  *float64 // Latitude (positive = North, negative = South)
	GPSLongitude *float64 // Longitude (positive = East, negative = West)

	// Image properties
	Orientation *int // Image orientation (1-8)
	ColorSpace  *int // Color space (1 = sRGB, 65535 = Uncalibrated)

	// Thumbnail metadata
	ThumbnailSize    int  // Thumbnail size in bytes
	ThumbnailPresent bool // Whether thumbnail exists
	// contains filtered or unexported fields
}

Data represents parsed EXIF metadata from JPEG APP1 marker. Follows TIFF/EXIF specification for metadata extraction.

type Parser

type Parser struct {
	// contains filtered or unexported fields
}

Parser extracts EXIF metadata from JPEG APP1 marker data.

Follows SOLID principles: - Single Responsibility: Only parses EXIF data. - Open/Closed: Extensible through interfaces. - Dependency Inversion: Depends on Validator abstraction.

func NewParser

func NewParser(validator Validator) *Parser

NewParser creates a new EXIF parser with validation support. Dependency Injection: validator is injected, allowing different validation strategies.

func (*Parser) Parse

func (p *Parser) Parse(data []byte) (*Data, error)

Parse extracts EXIF metadata from APP1 marker data. Returns Data struct with all available fields populated.

EXIF Structure (in APP1 marker): - "Exif\0\0" identifier (6 bytes) - TIFF header (byte order, magic, IFD offset) - IFD0 (main image metadata) - ExifIFD (extended EXIF tags) - GPS IFD (GPS coordinates) - IFD1 (thumbnail metadata)

Single Responsibility: Orchestrates EXIF parsing workflow.

type Validator

type Validator interface {
	// ValidateOffset checks if an offset is within valid range
	ValidateOffset(offset int, maxOffset int) error

	// ValidateDataLength checks if data has sufficient length
	ValidateDataLength(data []byte, required int) error

	// SafeAdd performs addition with overflow detection
	SafeAdd(a, b int) (int, error)
}

Validator provides input validation and bounds checking. Single Responsibility: Only validates inputs, doesn't parse data.

type ValidatorAdapter

type ValidatorAdapter struct {
	// contains filtered or unexported fields
}

ValidatorAdapter adapts the parent package's Validator to internal exif Validator interface. This bridges the interface differences while maintaining separation of concerns.

func NewValidatorAdapter

func NewValidatorAdapter(v interface {
	ValidatePosition(pos int, maxPos int) error
	SafeAdd(a, b int) (int, error)
},
) *ValidatorAdapter

NewValidatorAdapter creates a validator adapter.

func (*ValidatorAdapter) SafeAdd

func (v *ValidatorAdapter) SafeAdd(a, b int) (int, error)

SafeAdd performs addition with overflow detection.

func (*ValidatorAdapter) ValidateDataLength

func (v *ValidatorAdapter) ValidateDataLength(data []byte, required int) error

ValidateDataLength checks if data has sufficient length.

func (*ValidatorAdapter) ValidateOffset

func (v *ValidatorAdapter) ValidateOffset(offset int, maxOffset int) error

ValidateOffset checks if an offset is within valid range.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL