Adding support for heif (i.e. heic files).

This commit is contained in:
Jeremy Gordon 2019-09-24 11:57:29 -07:00 committed by Paul van Santen
parent 5a9d7f21d9
commit f9eadf55bb
No known key found for this signature in database
GPG key ID: AD10F40CB69516B6
6 changed files with 58 additions and 3 deletions

14
vips.go
View file

@ -185,6 +185,9 @@ func VipsIsTypeSupported(t ImageType) bool {
if t == MAGICK {
return int(C.vips_type_find_bridge(C.MAGICK)) != 0
}
if t == HEIF {
return int(C.vips_type_find_bridge(C.HEIF)) != 0
}
return false
}
@ -204,6 +207,9 @@ func VipsIsTypeSupportedSave(t ImageType) bool {
if t == TIFF {
return int(C.vips_type_find_save_bridge(C.TIFF)) != 0
}
if t == HEIF {
return int(C.vips_type_find_save_bridge(C.HEIF)) != 0
}
return false
}
@ -431,6 +437,8 @@ func vipsSave(image *C.VipsImage, o vipsSaveOptions) ([]byte, error) {
saveErr = C.vips_pngsave_bridge(tmpImage, &ptr, &length, strip, C.int(o.Compression), quality, interlace)
case TIFF:
saveErr = C.vips_tiffsave_bridge(tmpImage, &ptr, &length)
case HEIF:
saveErr = C.vips_heifsave_bridge(tmpImage, &ptr, &length, strip, quality, lossless)
default:
saveErr = C.vips_jpegsave_bridge(tmpImage, &ptr, &length, strip, quality, interlace)
}
@ -634,6 +642,12 @@ func vipsImageType(buf []byte) ImageType {
if IsTypeSupported(MAGICK) && strings.HasSuffix(readImageType(buf), "MagickBuffer") {
return MAGICK
}
// NOTE: libheif current;y only supports heic sub types; see:
// https://github.com/strukturag/libheif/issues/83#issuecomment-421427091
if IsTypeSupported(HEIF) && buf[4] == 0x66 && buf[5] == 0x74 && buf[6] == 0x79 && buf[7] == 0x70 &&
buf[8] == 0x68 && buf[9] == 0x65 && buf[10] == 0x69 && buf[11] == 0x63 {
return HEIF
}
return UNKNOWN
}