imagemeta – github.com/bep/imagemeta Index | Files | Directories

package imagemeta

import "github.com/bep/imagemeta"

Index

Constants

const UnknownPrefix = "UnknownTag_"

UnknownPrefix is used as prefix for unknown tags.

Variables

var (
	// ErrStopWalking is a sentinel error to signal that the walk should stop.
	ErrStopWalking = fmt.Errorf("stop walking")
)

Functions

func Decode

func Decode(opts Options) (err error)

Decode reads EXIF and IPTC metadata from r and returns a Meta struct.

func IsInvalidFormat

func IsInvalidFormat(err error) bool

IsInvalidFormat reports whether the error was an InvalidFormatError.

Types

type HandleTagFunc

type HandleTagFunc func(info TagInfo) error

HandleTagFunc is the function that is called for each tag.

type ImageFormat

type ImageFormat int

ImageFormat is the image format.

const (
	// ImageFormatAuto signals that the image format should be detected automatically (not implemented yet).
	ImageFormatAuto ImageFormat = iota
	// JPEG is the JPEG image format.
	JPEG
	// TIFF is the TIFF image format.
	TIFF
	// PNG is the PNG image format.
	PNG
	// WebP is the WebP image format.
	WebP
)

func (ImageFormat) String

func (i ImageFormat) String() string

type InvalidFormatError

type InvalidFormatError struct {
	Err error
}

InvalidFormatError is used when the format is invalid.

func (*InvalidFormatError) Error

func (e *InvalidFormatError) Error() string

func (*InvalidFormatError) Is

func (e *InvalidFormatError) Is(target error) bool

Is reports whether the target error is an InvalidFormatError.

type Options

type Options struct {
	// The Reader (typically a *os.File) to read image metadata from.
	R io.ReadSeeker

	// The image format in R.
	ImageFormat ImageFormat

	// If set, the decoder skip tags in which this function returns false.
	// If not set, a default function is used that skips all EXIF tags except those in IFD0.
	ShouldHandleTag func(tag TagInfo) bool

	// The function to call for each tag.
	HandleTag HandleTagFunc

	// The default XMP handler is currently very simple:
	// It decodes the RDF.Description.Attrs using Go's xml package and passes each tag to HandleTag.
	// If HandleXMP is set, the decoder will call this function for each XMP packet instead.
	// Note that r must be read completely.
	HandleXMP func(r io.Reader) error

	// If set, the decoder will only read the given tag sources.
	// Note that this is a bitmask and you may send multiple sources at once.
	Sources Source

	// Warnf will be called for each warning.
	Warnf func(string, ...any)

	// Timeout is the maximum time the decoder will spend on reading metadata.
	// Mostly useful for testing.
	// If set to 0, the decoder will not time out.
	Timeout time.Duration
}

Options contains the options for the Decode function.

type Rat

type Rat[T int32 | uint32] interface {
	Num() T
	Den() T
	Float64() float64

	// String returns the string representation of the rational number.
	// If the denominator is 1, the string will be the numerator only.
	String() string
}

Rat is a rational number.

func NewRat

func NewRat[T int32 | uint32](num, den T) (Rat[T], error)

NewRat returns a new Rat with the given numerator and denominator.

type Source

type Source uint32

Source is a bitmask and you may send multiple sources at once.

const (
	// EXIF is the EXIF tag source.
	EXIF Source = 1 << iota
	// IPTC is the IPTC tag source.
	IPTC
	// XMP is the XMP tag source.
	XMP
)

func (Source) Has

func (t Source) Has(source Source) bool

Has returns true if the given source is set.

func (Source) IsZero

func (t Source) IsZero() bool

IsZero returns true if the source is zero.

func (Source) Remove

func (t Source) Remove(source Source) Source

Remove removes the given source.

func (Source) String

func (i Source) String() string

type TagInfo

type TagInfo struct {
	// The tag source.
	Source Source
	// The tag name.
	Tag string
	// The tag namespace.
	// For EXIF, this is the path to the IFD, e.g. "IFD0/GPSInfoIFD"
	// For XMP, this is the namespace, e.g. "http://ns.adobe.com/camera-raw-settings/1.0/"
	// For IPTC, this is the record tag name as defined https://exiftool.org/TagNames/IPTC.html
	Namespace string
	// The tag value.
	Value any
}

TagInfo contains information about a tag.

type Tags

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

Tags is a collection of tags grouped per source.

func (*Tags) Add

func (t *Tags) Add(tag TagInfo)

Add adds a tag to the correct source.

func (Tags) All

func (t Tags) All() map[string]TagInfo

All returns all tags in a map.

func (*Tags) EXIF

func (t *Tags) EXIF() map[string]TagInfo

EXIF returns the EXIF tags.

func (Tags) GetDateTime

func (t Tags) GetDateTime() (time.Time, error)

GetDateTime tries DateTimeOriginal and then DateTime, in the EXIF tags, and returns the parsed time.Time value if found.

func (Tags) GetLatLong

func (t Tags) GetLatLong() (lat float64, long float64, err error)

GetLatLong returns the latitude and longitude from the EXIF GPS tags.

func (*Tags) Has

func (t *Tags) Has(tag TagInfo) bool

Has reports if a tag is already added.

func (*Tags) IPTC

func (t *Tags) IPTC() map[string]TagInfo

IPTC returns the IPTC tags.

func (*Tags) XMP

func (t *Tags) XMP() map[string]TagInfo

XMP returns the XMP tags.

Source Files

exiftype_string.go helpers.go imagedecoder_jpg.go imagedecoder_png.go imagedecoder_tif.go imagedecoder_webp.go imageformat_string.go imagemeta.go io.go metadecoder_exif.go metadecoder_exif_fields.go metadecoder_iptc.go metadecoder_xmp.go source_string.go

Directories

PathSynopsis
gen
Version
v0.8.4 (latest)
Published
Feb 4, 2025
Platform
linux/amd64
Imports
23 packages
Last checked
now

Tools for package owners.