Files
sbv/internal/heic_enabled.go
2025-11-11 16:40:10 -07:00

56 lines
1.1 KiB
Go

//go:build heic
package internal
import (
"bytes"
"image/jpeg"
"github.com/strukturag/libheif-go"
)
// convertHEICtoJPEG converts HEIC image data to JPEG format
// Returns the converted JPEG data or an error if conversion fails
// This version requires the libheif library and is enabled with the 'heic' build tag
func convertHEICtoJPEG(heicData []byte) ([]byte, error) {
// Create a new HEIF context
ctx, err := libheif.NewContext()
if err != nil {
return nil, err
}
// Read HEIC data from memory
err = ctx.ReadFromMemory(heicData)
if err != nil {
return nil, err
}
// Get the primary image handle
handle, err := ctx.GetPrimaryImageHandle()
if err != nil {
return nil, err
}
// Decode the image to RGB format
img, err := handle.DecodeImage(libheif.ColorspaceRGB, libheif.ChromaInterleavedRGB, nil)
if err != nil {
return nil, err
}
// Convert to Go's standard image.Image
goImg, err := img.GetImage()
if err != nil {
return nil, err
}
// Encode as JPEG with high quality
var buf bytes.Buffer
err = jpeg.Encode(&buf, goImg, &jpeg.Options{Quality: 90})
if err != nil {
return nil, err
}
return buf.Bytes(), nil
}