Skip to content

stephendo-dev/goheif

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

37 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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/huydq189/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

package main

import (
	"bytes"
	"image/jpeg"
	"io/ioutil"
	"log"

	"github.com/huydq189/goheif"
)

const jpegExtension = "jpeg"
const heifType = "image/heif"
const heicType = "image/heic"

// ConvertHeifToJpeg - If image file is Heif then convert it to Jpeg image file ortherwise return it's self
func ConvertHeifToJpeg(contentType, extension string) error {
	if contentType == heicType || contentType == heifType {
		goheif.SafeEncoding = true
		buffer, _ := ioutil.ReadFile("sample1.heif")
		img, err := goheif.Decode(bytes.NewReader(buffer))
		if err != nil {
			log.Println("Failed to decode heif file:", err)
			return err
		}
		newBuf := new(bytes.Buffer)
		err = jpeg.Encode(newBuf, img, nil)
		if err != nil {
			log.Println("Failed to encode to jpeg file:", err)
			return err
		}
		ioutil.WriteFile("sample1.jpeg", newBuf.Bytes(), 0644)
		return nil
	}
	return nil
}

func main() {
	ConvertHeifToJpeg(heifType, jpegExtension)
}

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

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages