Versions in this module Expand all Collapse all v3 v3.0.1 Oct 12, 2022 Changes in this version + const ExifAddressableAreaStart + const ExifDefaultFirstIfdOffset + const ExifSignatureLength + const IfdTagEntrySize + const TagAltitudeId + const TagAltitudeRefId + const TagDatestampId + const TagGpsVersionId + const TagLatitudeId + const TagLatitudeRefId + const TagLongitudeId + const TagLongitudeRefId + const TagTimestampId + const ThumbnailFqIfdPath + const ThumbnailOffsetTagId + const ThumbnailSizeTagId + var ErrChildIbNotFound = errors.New("child IB not found") + var ErrExifHeaderError = errors.New("exif header error") + var ErrGpsCoordinatesNotValid = errors.New("GPS coordinates not valid") + var ErrNoExif = errors.New("no exif data") + var ErrNoGpsTags = errors.New("no gps tags") + var ErrNoThumbnail = errors.New("no thumbnail") + var ErrOffsetInvalid = errors.New("file offset invalid") + var ErrTagEntryNotFound = errors.New("tag entry not found") + var ErrTagNotFound = errors.New("tag not found") + var ErrTagNotKnown = errors.New("tag is not known") + var ErrTagTypeNotValid = errors.New("tag type invalid") + var ExifBigEndianSignature = [4]byte + var ExifLittleEndianSignature = [4]byte + var ValidGpsVersions = [][4]byte + func BuildExifHeader(byteOrder binary.ByteOrder, firstIfdOffset uint32) (headerBytes []byte, err error) + func Collect(ifdMapping *exifcommon.IfdMapping, tagIndex *TagIndex, exifData []byte) (eh ExifHeader, index IfdIndex, err error) + func GetFlatExifData(exifData []byte, so *ScanOptions) (exifTags []ExifTag, med *MiscellaneousExifData, err error) + func GetFlatExifDataUniversalSearch(exifData []byte, so *ScanOptions, doUniversalSearch bool) (exifTags []ExifTag, med *MiscellaneousExifData, err error) + func GetFlatExifDataUniversalSearchWithReadSeeker(rs io.ReadSeeker, so *ScanOptions, doUniversalSearch bool) (exifTags []ExifTag, med *MiscellaneousExifData, err error) + func GpsDegreesEquals(gi1, gi2 GpsDegrees) bool + func LoadStandardTags(ti *TagIndex) (err error) + func SearchAndExtractExif(data []byte) (rawExif []byte, err error) + func SearchAndExtractExifN(data []byte, n int) (rawExif []byte, err error) + func SearchAndExtractExifWithReader(r io.Reader) (rawExif []byte, err error) + func SearchFileAndExtractExif(filepath string) (rawExif []byte, err error) + type BuilderTag struct + func NewBuilderTag(ifdPath string, tagId uint16, typeId exifcommon.TagTypePrimitive, ...) *BuilderTag + func NewChildIfdBuilderTag(ifdPath string, tagId uint16, value *IfdBuilderTagValue) *BuilderTag + func NewStandardBuilderTag(ifdPath string, it *IndexedTag, byteOrder binary.ByteOrder, value interface{}) *BuilderTag + func (bt *BuilderTag) SetValue(byteOrder binary.ByteOrder, value interface{}) (err error) + func (bt *BuilderTag) String() string + func (bt *BuilderTag) Value() (value *IfdBuilderTagValue) + type ByteWriter struct + func NewByteWriter(b *bytes.Buffer, byteOrder binary.ByteOrder) (bw *ByteWriter) + func (bw ByteWriter) WriteFourBytes(value []byte) (err error) + func (bw ByteWriter) WriteUint16(value uint16) (err error) + func (bw ByteWriter) WriteUint32(value uint32) (err error) + type ExifBlobSeeker interface + GetReadSeeker func(initialOffset int64) (rs io.ReadSeeker, err error) + type ExifHeader struct + ByteOrder binary.ByteOrder + FirstIfdOffset uint32 + func ParseExifHeader(data []byte) (eh ExifHeader, err error) + func Visit(rootIfdIdentity *exifcommon.IfdIdentity, ifdMapping *exifcommon.IfdMapping, ...) (eh ExifHeader, furthestOffset uint32, err error) + func (eh ExifHeader) String() string + type ExifReadSeeker struct + func NewExifReadSeeker(rs io.ReadSeeker) *ExifReadSeeker + func NewExifReadSeekerWithBytes(exifData []byte) *ExifReadSeeker + func (edbs *ExifReadSeeker) GetReadSeeker(initialOffset int64) (rs io.ReadSeeker, err error) + type ExifTag struct + ChildIfdPath string + Formatted string + FormattedFirst string + IfdPath string + TagId uint16 + TagName string + TagTypeId exifcommon.TagTypePrimitive + TagTypeName string + UnitCount uint32 + Value interface{} + ValueBytes []byte + func (et ExifTag) String() string + type GpsDegrees struct + Degrees float64 + Minutes float64 + Orientation byte + Seconds float64 + func NewGpsDegreesFromRationals(refValue string, rawCoordinate []exifcommon.Rational) (gd GpsDegrees, err error) + func (d GpsDegrees) Decimal() float64 + func (d GpsDegrees) Raw() []exifcommon.Rational + func (d GpsDegrees) String() string + type GpsInfo struct + Altitude int + Latitude GpsDegrees + Longitude GpsDegrees + Timestamp time.Time + func (gi *GpsInfo) S2CellId() s2.CellID + func (gi *GpsInfo) String() string + type Ifd struct + func FindIfdFromRootIfd(rootIfd *Ifd, ifdPath string) (ifd *Ifd, err error) + func (ifd *Ifd) ByteOrder() binary.ByteOrder + func (ifd *Ifd) ChildIfdIndex() map[string]*Ifd + func (ifd *Ifd) ChildWithIfdPath(iiChild *exifcommon.IfdIdentity) (childIfd *Ifd, err error) + func (ifd *Ifd) Children() []*Ifd + func (ifd *Ifd) DumpTags() []*IfdTagEntry + func (ifd *Ifd) DumpTree() []string + func (ifd *Ifd) Entries() []*IfdTagEntry + func (ifd *Ifd) EntriesByTagId() map[uint16][]*IfdTagEntry + func (ifd *Ifd) EnumerateTagsRecursively(visitor ParsedTagVisitor) (err error) + func (ifd *Ifd) FindTagWithId(tagId uint16) (results []*IfdTagEntry, err error) + func (ifd *Ifd) FindTagWithName(tagName string) (results []*IfdTagEntry, err error) + func (ifd *Ifd) GpsInfo() (gi *GpsInfo, err error) + func (ifd *Ifd) IfdIdentity() *exifcommon.IfdIdentity + func (ifd *Ifd) NextIfd() *Ifd + func (ifd *Ifd) Offset() uint32 + func (ifd *Ifd) ParentTagIndex() int + func (ifd *Ifd) PrintIfdTree() + func (ifd *Ifd) PrintTagTree(populateValues bool) + func (ifd *Ifd) String() string + func (ifd *Ifd) Thumbnail() (data []byte, err error) + type IfdBuilder struct + func GetOrCreateIbFromRootIb(rootIb *IfdBuilder, fqIfdPath string) (ib *IfdBuilder, err error) + func NewIfdBuilder(ifdMapping *exifcommon.IfdMapping, tagIndex *TagIndex, ...) (ib *IfdBuilder) + func NewIfdBuilderFromExistingChain(rootIfd *Ifd) (firstIb *IfdBuilder) + func NewIfdBuilderWithExistingIfd(ifd *Ifd) (ib *IfdBuilder) + func (ib *IfdBuilder) Add(bt *BuilderTag) (err error) + func (ib *IfdBuilder) AddChildIb(childIb *IfdBuilder) (err error) + func (ib *IfdBuilder) AddStandard(tagId uint16, value interface{}) (err error) + func (ib *IfdBuilder) AddStandardWithName(tagName string, value interface{}) (err error) + func (ib *IfdBuilder) AddTagsFromExisting(ifd *Ifd, includeTagIds []uint16, excludeTagIds []uint16) (err error) + func (ib *IfdBuilder) ChildWithTagId(childIfdTagId uint16) (childIb *IfdBuilder, err error) + func (ib *IfdBuilder) DeleteAll(tagId uint16) (n int, err error) + func (ib *IfdBuilder) DeleteFirst(tagId uint16) (err error) + func (ib *IfdBuilder) DeleteN(tagId uint16, n int) (err error) + func (ib *IfdBuilder) DumpToStrings() (lines []string) + func (ib *IfdBuilder) Find(tagId uint16) (position int, err error) + func (ib *IfdBuilder) FindN(tagId uint16, maxFound int) (found []int, err error) + func (ib *IfdBuilder) FindTag(tagId uint16) (bt *BuilderTag, err error) + func (ib *IfdBuilder) FindTagWithName(tagName string) (bt *BuilderTag, err error) + func (ib *IfdBuilder) IfdIdentity() *exifcommon.IfdIdentity + func (ib *IfdBuilder) NewBuilderTagFromBuilder(childIb *IfdBuilder) (bt *BuilderTag) + func (ib *IfdBuilder) NextIb() (nextIb *IfdBuilder, err error) + func (ib *IfdBuilder) PrintIfdTree() + func (ib *IfdBuilder) PrintTagTree() + func (ib *IfdBuilder) Replace(tagId uint16, bt *BuilderTag) (err error) + func (ib *IfdBuilder) ReplaceAt(position int, bt *BuilderTag) (err error) + func (ib *IfdBuilder) Set(bt *BuilderTag) (err error) + func (ib *IfdBuilder) SetNextIb(nextIb *IfdBuilder) (err error) + func (ib *IfdBuilder) SetStandard(tagId uint16, value interface{}) (err error) + func (ib *IfdBuilder) SetStandardWithName(tagName string, value interface{}) (err error) + func (ib *IfdBuilder) SetThumbnail(data []byte) (err error) + func (ib *IfdBuilder) String() string + func (ib *IfdBuilder) Tags() (tags []*BuilderTag) + func (ib *IfdBuilder) Thumbnail() []byte + type IfdBuilderTagValue struct + func NewIfdBuilderTagValueFromBytes(valueBytes []byte) *IfdBuilderTagValue + func NewIfdBuilderTagValueFromIfdBuilder(ib *IfdBuilder) *IfdBuilderTagValue + func (ibtv IfdBuilderTagValue) Bytes() []byte + func (ibtv IfdBuilderTagValue) Ib() *IfdBuilder + func (ibtv IfdBuilderTagValue) IsBytes() bool + func (ibtv IfdBuilderTagValue) IsIb() bool + func (ibtv IfdBuilderTagValue) String() string + type IfdByteEncoder struct + func NewIfdByteEncoder() (ibe *IfdByteEncoder) + func (ibe *IfdByteEncoder) EncodeToExif(ib *IfdBuilder) (data []byte, err error) + func (ibe *IfdByteEncoder) EncodeToExifPayload(ib *IfdBuilder) (data []byte, err error) + func (ibe *IfdByteEncoder) Journal() [][3]string + func (ibe *IfdByteEncoder) PrintJournal() + func (ibe *IfdByteEncoder) TableSize(entryCount int) uint32 + type IfdEnumerate struct + func NewIfdEnumerate(ifdMapping *exifcommon.IfdMapping, tagIndex *TagIndex, ebs ExifBlobSeeker, ...) *IfdEnumerate + func (ie *IfdEnumerate) Collect(rootIfdOffset uint32) (index IfdIndex, err error) + func (ie *IfdEnumerate) FurthestOffset() uint32 + func (ie *IfdEnumerate) Scan(iiRoot *exifcommon.IfdIdentity, ifdOffset uint32, visitor TagVisitorFn, ...) (med *MiscellaneousExifData, err error) + type IfdIndex struct + Ifds []*Ifd + Lookup map[string]*Ifd + RootIfd *Ifd + Tree map[int]*Ifd + type IfdTagEntry struct + func (ite *IfdTagEntry) ChildFqIfdPath() string + func (ite *IfdTagEntry) ChildIfdName() string + func (ite *IfdTagEntry) ChildIfdPath() string + func (ite *IfdTagEntry) Format() (phrase string, err error) + func (ite *IfdTagEntry) FormatFirst() (phrase string, err error) + func (ite *IfdTagEntry) GetRawBytes() (rawBytes []byte, err error) + func (ite *IfdTagEntry) IfdIdentity() *exifcommon.IfdIdentity + func (ite *IfdTagEntry) IfdPath() string + func (ite *IfdTagEntry) IsThumbnailOffset() bool + func (ite *IfdTagEntry) IsThumbnailSize() bool + func (ite *IfdTagEntry) SetChildIfd(ii *exifcommon.IfdIdentity) + func (ite *IfdTagEntry) String() string + func (ite *IfdTagEntry) TagId() uint16 + func (ite *IfdTagEntry) TagName() string + func (ite *IfdTagEntry) TagType() exifcommon.TagTypePrimitive + func (ite *IfdTagEntry) UnitCount() uint32 + func (ite *IfdTagEntry) Value() (value interface{}, err error) + type IndexedTag struct + Id uint16 + IfdPath string + Name string + SupportedTypes []exifcommon.TagTypePrimitive + func (it *IndexedTag) DoesSupportType(tagType exifcommon.TagTypePrimitive) bool + func (it *IndexedTag) GetEncodingType(value interface{}) exifcommon.TagTypePrimitive + func (it *IndexedTag) Is(ifdPath string, id uint16) bool + func (it *IndexedTag) IsName(ifdPath, name string) bool + func (it *IndexedTag) String() string + type MiscellaneousExifData struct + func (med *MiscellaneousExifData) UnknownTags() map[exifcommon.BasicTag]exifcommon.BasicTag + type ParsedTagVisitor func(*Ifd, *IfdTagEntry) error + type QueuedIfd struct + IfdIdentity *exifcommon.IfdIdentity + Offset uint32 + Parent *Ifd + ParentTagIndex int + type ScanOptions struct + type TagIndex struct + func NewTagIndex() *TagIndex + func (ti *TagIndex) Add(it *IndexedTag) (err error) + func (ti *TagIndex) FindFirst(id uint16, typeId exifcommon.TagTypePrimitive, ...) (it *IndexedTag, err error) + func (ti *TagIndex) Get(ii *exifcommon.IfdIdentity, id uint16) (it *IndexedTag, err error) + func (ti *TagIndex) GetWithName(ii *exifcommon.IfdIdentity, name string) (it *IndexedTag, err error) + func (ti *TagIndex) SetUniversalSearch(flag bool) + func (ti *TagIndex) UniversalSearch() bool + type TagVisitorFn func(ite *IfdTagEntry) (err error)