为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Go 读取 Exif 元数据

使用 Go 读取 Exif 元数据

Go
青春有我 2022-05-18 16:27:59
有没有人有使用“github.com/gohugoio/hugo/resources/images/exif”从本地图像中提取元数据的示例?我浏览了文档,因为我是 Go 新手,所以我不能 100% 确定我是否正在写东西。我确实阅读了图像,但我不确定下一步会是什么。fname := "image.jpg"f, err := os.Open(fname)if err != nil {  log.Fatal("Error: ", err)}(编辑1)其实我想我找到了一个解决方案:d, err := exif.NewDecoder(exif.IncludeFields("File Type"))x, err := d.Decode(f)if err != nil {  log.Fatal("Error: ", err)}fmt.Println(x)但是,问题是我如何知道哪些字段可用?File Type例如返回<nil>
查看完整描述

1 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

看起来 Hugo 使用github.com/rwcarlsen/goexif。


go.dev 上的包文档显示Exif.Walk可以遍历每个非零 EXIF 字段的名称和标签。


比如一个小程序:


package main


import (

    "fmt"

    "log"

    "os"


    "github.com/rwcarlsen/goexif/exif"

    "github.com/rwcarlsen/goexif/tiff"

)


type Printer struct{}


func (p Printer) Walk(name exif.FieldName, tag *tiff.Tag) error {

    fmt.Printf("%40s: %s\n", name, tag)

    return nil

}


func main() {

    if len(os.Args) < 2 {

        log.Fatal("please give filename as argument")

    }

    fname := os.Args[1]


    f, err := os.Open(fname)

    if err != nil {

        log.Fatal(err)

    }


    x, err := exif.Decode(f)

    if err != nil {

        log.Fatal(err)

    }


    var p Printer

    x.Walk(p)

}

例子:


$ go run main.go IMG_123.JPG


                          ResolutionUnit: 2

                        YCbCrPositioning: 2

                                    Make: "Canon"

                                   Model: "Canon IXUS 255 HS"

              ThumbJPEGInterchangeFormat: 5620

                         PixelYDimension: 3000

                FocalPlaneResolutionUnit: 2

                            GPSVersionID: [2,3,0,0]

                             ExifVersion: "0230"

                            WhiteBalance: 1

                                DateTime: "2016:10:04 17:27:56"

                  CompressedBitsPerPixel: "5/1"

                                   ... etc ...

                             Orientation: 1

                            MeteringMode: 5

                             FocalLength: "4300/1000"

                         PixelXDimension: 4000

              InteroperabilityIFDPointer: 4982

                   FocalPlaneXResolution: "4000000/244"

                             XResolution: "180/1"

                 ComponentsConfiguration: ""

                       ShutterSpeedValue: "96/32"

                           ApertureValue: "101/32"

                       ExposureBiasValue: "-1/3"

                   FocalPlaneYResolution: "3000000/183"

                        SceneCaptureType: 0


查看完整回答
反对 回复 2022-05-18
  • 1 回答
  • 0 关注
  • 186 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信