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 ¶
NewParser creates a new EXIF parser with validation support. Dependency Injection: validator is injected, allowing different validation strategies.
func (*Parser) Parse ¶
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.