photometadata

package module
v1.7.0 Latest Latest
Warning

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

Go to latest
Published: Jan 30, 2021 License: MIT Imports: 10 Imported by: 0

README

photo-metadata

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ExtractApp1Segments

func ExtractApp1Segments(rd io.Reader) ([][]byte, error)

ExtractApp1Segments returns all APP1 segments found in the provided reader data

func ExtractApp1SegmentsWithLog

func ExtractApp1SegmentsWithLog(rd io.Reader, l *log.Entry) ([][]byte, error)

ExtractApp1SegmentsWithLog returns all APP1 segments found in the provided reader data and uses the provided logger

func ProcessApp1Segment

func ProcessApp1Segment(reader io.Reader, dataLen int, metadata *Metadata, l *log.Entry) error

ProcessApp1Segment parses EXIF or XMP data from the reader assuming it contains the data for an APP1 segment The resulting metadata is stored in the provided metadata object

Types

type ExifData

type ExifData map[ExifTag]interface{}

ExifData is a map of extracted Exif data This must be binary-compatible with tiff.Metadata

type ExifTag

type ExifTag uint16

ExifTag is the type for all Exif tags

const (
	ExifTagImageWidth                ExifTag = 0x100
	ExifTagImageLength               ExifTag = 0x101
	ExifTagBitsPerSample             ExifTag = 0x102
	ExifTagCompression               ExifTag = 0x103
	ExifTagPhotometricInterpretation ExifTag = 0x106
	ExifTagOrientation               ExifTag = 0x112
	ExifTagSamplesPerPixel           ExifTag = 0x115
	ExifTagPlanarConfiguration       ExifTag = 0x11C
	ExifTagYCbCrSubSampling          ExifTag = 0x212
	ExifTagYCbCrPositioning          ExifTag = 0x213
	ExifTagXResolution               ExifTag = 0x11A
	ExifTagYResolution               ExifTag = 0x11B
	ExifTagResolutionUnit            ExifTag = 0x128

	ExifTagStripOffsets                ExifTag = 0x111
	ExifTagRowsPerStrip                ExifTag = 0x116
	ExifTagStripByteCounts             ExifTag = 0x117
	ExifTagJPEGInterchangeFormat       ExifTag = 0x201
	ExifTagJPEGInterchangeFormatLength ExifTag = 0x202

	ExifTagTransferFunction      ExifTag = 0x12D
	ExifTagWhitePoint            ExifTag = 0x13E
	ExifTagPrimaryChromaticities ExifTag = 0x13F
	ExifTagYCbCrCoefficients     ExifTag = 0x211
	ExifTagReferenceBlackWhite   ExifTag = 0x214

	ExifTagDateTime         ExifTag = 0x132
	ExifTagImageDescription ExifTag = 0x10E
	ExifTagMake             ExifTag = 0x10F
	ExifTagModel            ExifTag = 0x110
	ExifTagSoftware         ExifTag = 0x131
	ExifTagArtist           ExifTag = 0x13B
	ExifTagCopyright        ExifTag = 0x8298

	ExifTagExifOffset             ExifTag = 0x8769
	ExifTagGpsOffset              ExifTag = 0x8825
	ExifTagInteroperabilityOffset ExifTag = 0xA005

	// Exif IFD
	ExifTagExifVersion     ExifTag = 0x9000
	ExifTagFlashpixVersion ExifTag = 0xA000

	ExifTagColorSpace ExifTag = 0xA001

	ExifTagComponentsConfiguration ExifTag = 0x9101
	ExifTagCompressedBitsPerPixel  ExifTag = 0x9102
	ExifTagPixelXDimension         ExifTag = 0xA002
	ExifTagPixelYDimension         ExifTag = 0xA003

	ExifTagMakerNote   ExifTag = 0x927C
	ExifTagUserComment ExifTag = 0x9286

	ExifTagRelatedSoundFile ExifTag = 0xA004

	ExifTagDateTimeOriginal    ExifTag = 0x9003
	ExifTagDateTimeDigitized   ExifTag = 0x9004
	ExifTagSubSecTime          ExifTag = 0x9290
	ExifTagSubSecTimeOriginal  ExifTag = 0x9291
	ExifTagSubSecTimeDigitized ExifTag = 0x9292

	ExifTagExposureTime             ExifTag = 0x829A
	ExifTagFNumber                  ExifTag = 0x829D
	ExifTagExposureProgram          ExifTag = 0x8822
	ExifTagSpectralSensitivity      ExifTag = 0x8824
	ExifTagISOSpeedRatings          ExifTag = 0x8827
	ExifTagOECF                     ExifTag = 0x8828
	ExifTagShutterSpeedValue        ExifTag = 0x9201
	ExifTagApertureValue            ExifTag = 0x9202
	ExifTagBrightnessValue          ExifTag = 0x9203
	ExifTagExposureBiasValue        ExifTag = 0x9204
	ExifTagMaxApertureValue         ExifTag = 0x9205
	ExifTagSubjectDistance          ExifTag = 0x9206
	ExifTagMeteringMode             ExifTag = 0x9207
	ExifTagLightSource              ExifTag = 0x9208
	ExifTagFlash                    ExifTag = 0x9209
	ExifTagFocalLength              ExifTag = 0x920A
	ExifTagSubjectArea              ExifTag = 0x9214
	ExifTagFlashEnergy              ExifTag = 0xA20B
	ExifTagSpatialFrequencyResponse ExifTag = 0xA20C
	ExifTagFocalPlaneXResolution    ExifTag = 0xA20E
	ExifTagFocalPlaneYResolution    ExifTag = 0xA20F
	ExifTagFocalPlaneResolutionUnit ExifTag = 0xA210
	ExifTagSubjectLocation          ExifTag = 0xA214
	ExifTagExposureIndex            ExifTag = 0xA215
	ExifTagSensingMethod            ExifTag = 0xA217
	ExifTagFileSource               ExifTag = 0xA300
	ExifTagSceneType                ExifTag = 0xA301
	ExifTagCFAPattern               ExifTag = 0xA302
	ExifTagCustomRendered           ExifTag = 0xA401
	ExifTagExposureMode             ExifTag = 0xA402
	ExifTagWhiteBalance             ExifTag = 0xA403
	ExifTagDigitalZoomRatio         ExifTag = 0xA404
	ExifTagFocalLengthIn35mmFilm    ExifTag = 0xA405
	ExifTagSceneCaptureType         ExifTag = 0xA406
	ExifTagGainControl              ExifTag = 0xA407
	ExifTagContrast                 ExifTag = 0xA408
	ExifTagSaturation               ExifTag = 0xA409
	ExifTagSharpness                ExifTag = 0xA40A
	ExifTagDeviceSettingDescription ExifTag = 0xA40B
	ExifTagSubjectDistanceRange     ExifTag = 0xA40C

	ExifTagImageUniqueID ExifTag = 0xA420

	// Custom (not in any standard, but derived from examples)
	ExifTagLensModel ExifTag = 42036

	// GPS IFD
	ExifTagGPSVersionID        ExifTag = 0x0
	ExifTagGPSLatitudeRef      ExifTag = 0x1
	ExifTagGPSLatitude         ExifTag = 0x2
	ExifTagGPSLongitudeRef     ExifTag = 0x3
	ExifTagGPSLongitude        ExifTag = 0x4
	ExifTagGPSAltitudeRef      ExifTag = 0x5
	ExifTagGPSAltitude         ExifTag = 0x6
	ExifTagGPSTimeStamp        ExifTag = 0x7
	ExifTagGPSSatellites       ExifTag = 0x8
	ExifTagGPSStatus           ExifTag = 0x9
	ExifTagGPSMeasureMode      ExifTag = 0xA
	ExifTagGPSDOP              ExifTag = 0xB
	ExifTagGPSSpeedRef         ExifTag = 0xC
	ExifTagGPSSpeed            ExifTag = 0xD
	ExifTagGPSTrackRef         ExifTag = 0xE
	ExifTagGPSTrack            ExifTag = 0xF
	ExifTagGPSImgDirectionRef  ExifTag = 0x10
	ExifTagGPSImgDirection     ExifTag = 0x11
	ExifTagGPSMapDatum         ExifTag = 0x12
	ExifTagGPSDestLatitudeRef  ExifTag = 0x13
	ExifTagGPSDestLatitude     ExifTag = 0x14
	ExifTagGPSDestLongitudeRef ExifTag = 0x15
	ExifTagGPSDestLongitude    ExifTag = 0x16
	ExifTagGPSDestBearingRef   ExifTag = 0x17
	ExifTagGPSDestBearing      ExifTag = 0x18
	ExifTagGPSDestDistanceRef  ExifTag = 0x19
	ExifTagGPSDestDistance     ExifTag = 0x1A
	ExifTagGPSProcessingMethod ExifTag = 0x1B
	ExifTagGPSAreaInformation  ExifTag = 0x1C
	ExifTagGPSDateStamp        ExifTag = 0x1D
	ExifTagGPSDifferential     ExifTag = 0x1E
)

Reference: https://www.exif.org/Exif2-2.PDF

func (ExifTag) String

func (i ExifTag) String() string

type Metadata

type Metadata struct {
	Width  int
	Height int
	Exif   ExifData
	Xmp    XmpData
}

Metadata holds all photo metadata (dimensions, Exif and XMP)

func Extract

func Extract(rd io.Reader) (*Metadata, error)

Extract photo metadata from the given io.Reader

func ExtractWithLog

func ExtractWithLog(rd io.Reader, l *log.Entry) (*Metadata, error)

ExtractWithLog extracts photo metadata from the given io.Reader and uses the provided logger for log messages

func NewMetadata

func NewMetadata() *Metadata

NewMetadata creates a new empty Metadata object

type Rational

type Rational = tiff.IfdRational

Rational number (used in Exif values)

type Urational

type Urational = tiff.IfdUrational

Urational is an unsigned rational number (used in Exif values)

type XmpData

type XmpData struct {
	Title    string   `xml:"title>Alt>li"` // RDF format allows more than one
	Subjects []string `xml:"subject>Bag>li"`

	Location string `xml:"Location,attr"`
	Country  string `xml:"Country,attr"`
	State    string `xml:"State,attr"`
	City     string `xml:"City,attr"`

	UsageTerms         string `xml:"UsageTerms>Alt>li"` // RDF format allows more than one
	RightsWebStatement string `xml:"WebStatement,attr"`
	Rating             int    `xml:"Rating,attr"`
}

XmpData stores data extracted from XMP data. This corresponds to the rdf:Description element.

Directories

Path Synopsis
internal

Jump to

Keyboard shortcuts

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