📚 go-exiftool - Awesome Go Library for File Handling
Go bindings for ExifTool, the well-known library used to extract as much metadata as possible (EXIF, IPTC, ...) from files (pictures, PDF, office, ...).
🏷️ File Handling
📂 Libraries for handling files and file systems.
⭐ 249 stars
Detailed Description of go-exiftool
go-exiftool
go-exiftool is a golang library that wraps ExifTool.
ExifTool's purpose is to extract and update as much metadata as possible (EXIF, IPTC, XMP, GPS, ...) from a lots of differents file types (Office documents, pictures, movies, PDF, ...).
go-exiftool uses ExifTool's stay_open
feature to optimize performance.
Requirements
go-exiftool needs ExifTool to be installed.
- On Debian :
sudo apt-get install exiftool
By default, go-exiftool
binary will look for exiftool
binary in $PATH, but another location can be specified (see SetExiftoolBinaryPath
functional option).
Usage
Metadata extraction
et, err := exiftool.NewExiftool()
if err != nil {
fmt.Printf("Error when intializing: %v\n", err)
return
}
defer et.Close()
fileInfos := et.ExtractMetadata("testdata/20190404_131804.jpg")
for _, fileInfo := range fileInfos {
if fileInfo.Err != nil {
fmt.Printf("Error concerning %v: %v\n", fileInfo.File, fileInfo.Err)
continue
}
for k, v := range fileInfo.Fields {
fmt.Printf("[%v] %v\n", k, v)
}
}
Output :
[FOV] 69.4 deg
[Orientation] Rotate 90 CW
[ColorSpace] sRGB
[Compression] JPEG (old-style)
[YCbCrSubSampling] YCbCr4:2:2 (2 1)
[Aperture] 1.7
[ColorComponents] 3
[SubSecCreateDate] 2019:04:04 13:18:03.0937
[FileSize] 26 kB
[FileAccessDate] 2019:05:17 22:44:26+02:00
[DateTimeOriginal] 2019:04:04 13:18:03
[CreateDate] 2019:04:04 13:18:03
(...)
Metadata update
See example function ExampleExiftool_Write in exiftool_sample_test.go
Changelog
- v1.1.0 : initial release
- v1.1.1
- v1.1.3
- add Mac & Windows support (thanks to @PROger4ever)
- increase errors readability (thanks to @PROger4ever)
- v1.2.0
- add stdout and stderr buffer configuration capabilities (thank to @asannikov)
- v1.3.0
- Add functionnal option to set ExifTool's
-charset
parameter (thank to @PROger4ever)
- Add functionnal option to set ExifTool's
- v1.3.1
- v1.3.2
- add Freebsd support (thanks to @ghyman1)
- v1.4.0
- "NoPrintConversion" functional option (thanks to Kjeldgaard)
- v1.5.0
- "ExtractEmbedded" functional option
- v1.6.0
- "ExtractAllBinaryMetadata" functional option
- v1.6.1
- "SetExiftoolBinaryPath" functional option : specify where to find exiftool binary (default : $path)
- v1.6.2
- Several improvements (thanks to Dale Hui)
- v1.7.0
- Add metadata writing capabilities (thanks to Dale Hui)
- v1.8.0
- Fix a bug that was blocking
go-exiftool
when a folder was provided. Folder metadata extraction will now return a new sentinel error (ErrNotFile). - Add a new sentinel error (
ErrBufferTooSmall
) that is returned whengo-exiftool
's buffer isn't big enough for a specifi file (countermeasure: initializego-exiftool
with theBuffer
option) - New option to specify a date format (
DateFormat
) (thanks to Andy Gorman) - New option to output format for GPS coordinates (
CoordFormat
) (thanks to Andy Gorman)
- Fix a bug that was blocking
- v1.9.0
- v1.10.0