Skip to content
/ goheif Public

go gettable decoder/converter for HEIF/HEIC based on libde265

Notifications You must be signed in to change notification settings

jdeng/goheif

Folders and files

NameName
Last commit message
Last commit date

Latest commit

e2bbb19 · Nov 15, 2024

History

46 Commits
Mar 23, 2020
Nov 13, 2024
Nov 15, 2024
Mar 28, 2019
Mar 3, 2019
Mar 29, 2019
Nov 20, 2022
Nov 11, 2024
Nov 11, 2024
Nov 13, 2024
Nov 13, 2024

Repository files navigation

GoHeif - A go gettable decoder/converter for HEIC based on libde265

Install

  • heic2jpg to convert HEIC files to JPG preserving exif

go get github.com/jdeng/goheif/...

  • Tested

    • Mac OS X (High Sierra)
    • Linux (Ubuntu 16.04 / GCC 5.4)
    • Windows 7 64bit with TDM-GCC 32 (GCC 5.1) and golang 1.12 windows/386
  • Code Sample

func main() {
	flag.Parse()
	...
  
	fin, fout := flag.Arg(0), flag.Arg(1)
	fi, err := os.Open(fin)
	if err != nil {
		log.Fatal(err)
	}
	defer fi.Close()

	exif, err := goheif.ExtractExif(fi)
	if err != nil {
		log.Printf("Warning: no EXIF from %s: %v\n", fin, err)
	}

	img, err := goheif.Decode(fi)
	if err != nil {
		log.Fatalf("Failed to parse %s: %v\n", fin, err)
	}

	fo, err := os.OpenFile(fout, os.O_RDWR|os.O_CREATE, 0644)
	if err != nil {
		log.Fatalf("Failed to create output file %s: %v\n", fout, err)
	}
	defer fo.Close()

	w, _ := newWriterExif(fo, exif)
	err = jpeg.Encode(w, img, nil)
	if err != nil {
		log.Fatalf("Failed to encode %s: %v\n", fout, err)
	}

	log.Printf("Convert %s to %s successfully\n", fin, fout)
}

What is done

  • Changes make to @bradfitz's (https://github.com/bradfitz) golang heif parser

    • Some minor bugfixes
    • A few new box parsers, noteably 'iref' and 'hvcC'
  • Include libde265's source code (SSE by default enabled) and a simple golang binding

  • A Utility heic2jpg to illustrate the usage.

License

  • heif and libde265 are in their own licenses

  • goheif.go, libde265 golang binding and the heic2jpg utility are in MIT license

Credits

TODO

  • Upstream the changes to heif?

About

go gettable decoder/converter for HEIF/HEIC based on libde265

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages