Golang에서 사진의 exif 정보를 읽기

http://exif.regex.info/exif.cgi 이 사이트 처럼 사진 업로드 하면 exif 정보 읽어서 표시해주는 사이트를 golang으로 만들어 볼려고 시작했는데 이것저것 테스트 하다가 내린 결론은 사이트 처럼 단순 정보를 출력하는 페이지를 만들거면 이 방식 보다 exiftool.org 에서 바이너리 파일 받아서 돌린담에 그 결과를 출력하는게 더 간단하고 확실하다는걸 깨달았음. 아래에 올린 소스는 그냥 여태 삽질한거 아쉬워서 그냥 기록용으로 남겨둠.

package main

import (
    "fmt"
    "io"
    "os"

    exif "github.com/dsoprea/go-exif/v3"
    exifcommon "github.com/dsoprea/go-exif/v3/common"
)

func main() {

    var filePath = "./IMG_20170912_222301630.jpg"

    file, err := os.Open(filePath)
    if err != nil {
        panic(err)
    }
    defer file.Close()

    r := io.Reader(file)
    rawExif, err := exif.SearchAndExtractExifWithReader(r)
    if err != nil {
        panic(err)
    }
    im, err := exifcommon.NewIfdMappingWithStandard()
    if err != nil {
        panic(err)
    }
    ti := exif.NewTagIndex()

    _, index, err := exif.Collect(im, ti, rawExif)
    if err != nil {
        panic(err)
    }

    cb := func(ifd *exif.Ifd, ite *exif.IfdTagEntry) error {
        //이부분이 재귀로 들어오면서 호출됨
        val, _ := ite.Value()
        tmp := fmt.Sprintf("%s = %v", ite.TagName(), val)
        fmt.Println(tmp)
        return nil
    }
    err = index.RootIfd.EnumerateTagsRecursively(cb)
    if err != nil {
        panic(err)
    }

}

이것저것 테스트 한건 많은데 이게 그나마 제일 심플하게 전부 다 출력하는거라 이것만 남겨둠.
참고: https://pkg.go.dev/github.com/dsoprea/go-exif/v3#pkg-examples

크리에이티브 커먼즈 라이선스 Linsoo 의 저작물인 이 저작물은(는) 크리에이티브 커먼즈 저작자표시-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.

댓글 달기

이메일 주소는 공개되지 않습니다.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.