heic

package module
v1.1.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 4, 2026 License: LGPL-3.0 Imports: 15 Imported by: 1

README

HEIC

This is a fork of the Go code in github.com/strukturag/libheif/go, with the intention of being able to load dynamic wallpapers in the heic format.

Code has been added that makes it possible to read the timing information from dynamic wallpapers in the .heic and/or HEIF format.

...
metadataIDs := handle.MetadataIDs()
if len(metadataIDs) > 0 {
    metadataID := metadataIDs[0]
    timeTable, err := handle.ImageTimes(metadataID)
    // the mapping from image index to timestamp that contains the correct hour and minute are now in "timeTable"
    ...
}

Take a look at metadata_test.go for a full example.

Requirements

  • libheif >= 1.22.2

General info

  • Version: 1.1.1
  • License: LGPL3

Documentation

Index

Constants

View Source
const (
	CompressionUndefined    = C.heif_compression_undefined
	CompressionHEVC         = C.heif_compression_HEVC
	CompressionAV1          = C.heif_compression_AV1
	CompressionAVC          = C.heif_compression_AVC
	CompressionJPEG         = C.heif_compression_JPEG
	CompressionJPEG2000     = C.heif_compression_JPEG2000
	CompressionVVC          = C.heif_compression_VVC
	CompressionEVC          = C.heif_compression_EVC
	CompressionUncompressed = C.heif_compression_uncompressed
	CompressionMask         = C.heif_compression_mask
	CompressionHTJ2K        = C.heif_compression_HTJ2K
)
View Source
const (
	ChromaUndefined              = C.heif_chroma_undefined
	ChromaMonochrome             = C.heif_chroma_monochrome
	Chroma420                    = C.heif_chroma_420
	Chroma422                    = C.heif_chroma_422
	Chroma444                    = C.heif_chroma_444
	ChromaInterleavedRGB         = C.heif_chroma_interleaved_RGB
	ChromaInterleavedRGBA        = C.heif_chroma_interleaved_RGBA
	ChromaInterleavedRRGGBBAA_BE = C.heif_chroma_interleaved_RRGGBBAA_BE
	ChromaInterleavedRRGGBBAA_LE = C.heif_chroma_interleaved_RRGGBBAA_LE
	ChromaInterleavedRRGGBB_BE   = C.heif_chroma_interleaved_RRGGBB_BE
	ChromaInterleavedRRGGBB_LE   = C.heif_chroma_interleaved_RRGGBB_LE

	ChromaInterleaved24Bit = C.heif_chroma_interleaved_24bit
	ChromaInterleaved32Bit = C.heif_chroma_interleaved_32bit
)
View Source
const (
	ChromaDownsamplingNearestNeighbor = C.heif_chroma_downsampling_nearest_neighbor
	ChromaDownsamplingAverage         = C.heif_chroma_downsampling_average
	ChromaDownsamplingSharpYUV        = C.heif_chroma_downsampling_sharp_yuv
)
View Source
const (
	ChromaUpsamplingNearestNeighbor = C.heif_chroma_upsampling_nearest_neighbor
	ChromaUpsamplingBilinear        = C.heif_chroma_upsampling_bilinear
)
View Source
const (
	ColorspaceUndefined  = C.heif_colorspace_undefined
	ColorspaceYCbCr      = C.heif_colorspace_YCbCr
	ColorspaceRGB        = C.heif_colorspace_RGB
	ColorspaceMonochrome = C.heif_colorspace_monochrome
	ColorspaceNonvisual  = C.heif_colorspace_nonvisual
)
View Source
const (
	ChannelY           = C.heif_channel_Y
	ChannelCb          = C.heif_channel_Cb
	ChannelCr          = C.heif_channel_Cr
	ChannelR           = C.heif_channel_R
	ChannelG           = C.heif_channel_G
	ChannelB           = C.heif_channel_B
	ChannelAlpha       = C.heif_channel_Alpha
	ChannelInterleaved = C.heif_channel_interleaved
	ChannelFilterArray = C.heif_channel_filter_array
	ChannelDepth       = C.heif_channel_depth
	ChannelDisparity   = C.heif_channel_disparity
)
View Source
const (
	ProgressStepTotal    = C.heif_progress_step_total
	ProgressStepLoadTile = C.heif_progress_step_load_tile
)
View Source
const (
	ErrorOK = C.heif_error_Ok

	// Input file does not exist.
	ErrorInputDoesNotExist = C.heif_error_Input_does_not_exist

	// Input file type is not supported.
	ErrorUnsupportedFiletype = C.heif_error_Unsupported_filetype

	// Image requires an unsupported decoder feature.
	ErrorUnsupportedFeature = C.heif_error_Unsupported_feature

	// Library API has been used in an invalid way.
	ErrorUsage = C.heif_error_Usage_error

	// Could not allocate enough memory.
	ErrorMemoryAllocation = C.heif_error_Memory_allocation_error

	// The decoder plugin generated an error
	ErrorDecoderPlugin = C.heif_error_Decoder_plugin_error

	// The decoder plugin generated an error
	ErrorEncoderPlugin = C.heif_error_Encoder_plugin_error

	// Error during encoding or when writing to the output
	ErrorEncoding = C.heif_error_Encoding_error

	ErrorEndOfSequence = C.heif_error_End_of_sequence

	// Application has asked for a color profile type that does not exist
	ErrorColorProfileDoesNotExist = C.heif_error_Color_profile_does_not_exist

	ErrorPluginLoadingError = C.heif_error_Plugin_loading_error

	ErrorCanceled = C.heif_error_Canceled
)
View Source
const (
	// no further information available
	SuberrorUnspecified = C.heif_suberror_Unspecified

	// End of data reached unexpectedly.
	SuberrorEndOfData = C.heif_suberror_End_of_data

	// Size of box (defined in header) is wrong
	SuberrorInvalidBoxSize = C.heif_suberror_Invalid_box_size

	// Mandatory 'ftyp' box is missing
	SuberrorNoFtypBox = C.heif_suberror_No_ftyp_box

	SuberrorNoIdatBox = C.heif_suberror_No_idat_box

	SuberrorNoMetaBox = C.heif_suberror_No_meta_box

	SuberrorNoHdlrBox = C.heif_suberror_No_hdlr_box

	SuberrorNoHvcCBox = C.heif_suberror_No_hvcC_box

	SuberrorNoPitmBox = C.heif_suberror_No_pitm_box

	SuberrorNoIpcoBox = C.heif_suberror_No_ipco_box

	SuberrorNoIpmaBox = C.heif_suberror_No_ipma_box

	SuberrorNoIlocBox = C.heif_suberror_No_iloc_box

	SuberrorNoIinfBox = C.heif_suberror_No_iinf_box

	SuberrorNoIprpBox = C.heif_suberror_No_iprp_box

	SuberrorNoIrefBox = C.heif_suberror_No_iref_box

	SuberrorNoPictHandler = C.heif_suberror_No_pict_handler

	// An item property referenced in the 'ipma' box is not existing in the 'ipco' container.
	SuberrorIpmaBoxReferencesNonexistingProperty = C.heif_suberror_Ipma_box_references_nonexisting_property

	// No properties have been assigned to an item.
	SuberrorNoPropertiesAssignedToItem = C.heif_suberror_No_properties_assigned_to_item

	// Image has no (compressed) data
	SuberrorNoItemData = C.heif_suberror_No_item_data

	// Invalid specification of image grid (tiled image)
	SuberrorInvalidGridData = C.heif_suberror_Invalid_grid_data

	// Tile-images in a grid image are missing
	SuberrorMissingGridImages = C.heif_suberror_Missing_grid_images

	SuberrorNoMoovBox = C.heif_suberror_No_moov_box

	SuberrorNoAV1CBox = C.heif_suberror_No_av1C_box

	SuberrorNoAVCCBox = C.heif_suberror_No_avcC_box

	SuberrorInvalidCleanAperture = C.heif_suberror_Invalid_clean_aperture

	// Invalid specification of overlay image
	SuberrorInvalidOverlayData = C.heif_suberror_Invalid_overlay_data

	// Overlay image completely outside of visible canvas area
	SuberrorOverlayImageOutsideOfCanvas = C.heif_suberror_Overlay_image_outside_of_canvas

	SuberrorPluginIsNotLoaded = C.heif_suberror_Plugin_is_not_loaded

	SuberrorPluginLoadingError = C.heif_suberror_Plugin_loading_error

	SuberrorAuxiliaryImageTypeUnspecified = C.heif_suberror_Auxiliary_image_type_unspecified

	SuberrorCannotReadPluginDirectory = C.heif_suberror_Cannot_read_plugin_directory

	SuberrorNoMatchingDecoderInstalled = C.heif_suberror_No_matching_decoder_installed

	SuberrorNoOrInvalidPrimaryItem = C.heif_suberror_No_or_invalid_primary_item

	SuberrorNoInfeBox = C.heif_suberror_No_infe_box

	SuberrorUnknownColorProfileType = C.heif_suberror_Unknown_color_profile_type

	SuberrorWrongTileImageChromaFormat = C.heif_suberror_Wrong_tile_image_chroma_format

	SuberrorInvalidFractionalNumber = C.heif_suberror_Invalid_fractional_number

	SuberrorInvalidImageSize = C.heif_suberror_Invalid_image_size

	SuberrorCameraIntrinsicMatrixUndefined = C.heif_suberror_Camera_intrinsic_matrix_undefined

	SuberrorCameraExtrinsicMatrixUndefined = C.heif_suberror_Camera_extrinsic_matrix_undefined

	SuberrorDecompressionInvalidData = C.heif_suberror_Decompression_invalid_data

	SuberrorInvalidJ2KCodestream = C.heif_suberror_Invalid_J2K_codestream

	SuberrorNoVcCBox = C.heif_suberror_No_vvcC_box

	SuberrorNoIcbrBox = C.heif_suberror_No_icbr_box

	SuberrorInvalidMiniBox = C.heif_suberror_Invalid_mini_box

	// A security limit preventing unreasonable memory allocations was exceeded by the input file.
	// Please check whether the file is valid. If it is, contact us so that we could increase the
	// security limits further.
	SuberrorSecurityLimitExceeded = C.heif_suberror_Security_limit_exceeded

	CompressionInitialisationError = C.heif_suberror_Compression_initialisation_error

	// An item ID was used that is not present in the file.
	SuberrorNonexistingItemReferenced = C.heif_suberror_Nonexisting_item_referenced // also used for Invalid_input

	// An API argument was given a NULL pointer, which is not allowed for that function.
	SuberrorNullPointerArgument = C.heif_suberror_Null_pointer_argument

	// Image channel referenced that does not exist in the image
	SuberrorNonexistingImageChannelReferenced = C.heif_suberror_Nonexisting_image_channel_referenced

	// The version of the passed plugin is not supported.
	SuberrorUnsupportedPluginVersion = C.heif_suberror_Unsupported_plugin_version

	// The version of the passed writer is not supported.
	SuberrorUnsupportedWriterVersion = C.heif_suberror_Unsupported_writer_version

	// The given (encoder) parameter name does not exist.
	SuberrorUnsupportedParameter = C.heif_suberror_Unsupported_parameter

	// The value for the given parameter is not in the valid range.
	SuberrorInvalidParameterValue = C.heif_suberror_Invalid_parameter_value

	SuberrorInvalidProperty = C.heif_suberror_Invalid_property

	SuberrorItemReferenceCycle = C.heif_suberror_Item_reference_cycle

	SuberrorInvalidPixiBox = C.heif_suberror_Invalid_pixi_box

	SuberrorInvalidRegionData = C.heif_suberror_Invalid_region_data

	SuberrorNoIspeProperty = C.heif_suberror_No_ispe_property

	SuberrorWrongTileImagePixelDepth = C.heif_suberror_Wrong_tile_image_pixel_depth

	SuberrorUnknownNCLXColorPrimaries = C.heif_suberror_Unknown_NCLX_color_primaries

	SuberrorUnknownNCLXTransferCharacteristics = C.heif_suberror_Unknown_NCLX_transfer_characteristics

	SuberrorUnknownNCLXMatrixCoefficients = C.heif_suberror_Unknown_NCLX_matrix_coefficients

	// Image was coded with an unsupported compression method.
	SuberrorUnsupportedCodec = C.heif_suberror_Unsupported_codec

	// Image is specified in an unknown way, e.g. as tiled grid image (which is supported)
	SuberrorUnsupportedImageType = C.heif_suberror_Unsupported_image_type

	SuberrorUnsupportedDataVersion = C.heif_suberror_Unsupported_data_version

	SuberrorUnsupportedGenericCompressionMethod = C.heif_suberror_Unsupported_generic_compression_method

	SuberrorUnsupportedEssentialProperty = C.heif_suberror_Unsupported_essential_property

	// The conversion of the source image to the requested chroma / colorspace is not supported.
	SuberrorUnsupportedColorConversion = C.heif_suberror_Unsupported_color_conversion

	SuberrorUnsupportedItemConstructionMethod = C.heif_suberror_Unsupported_item_construction_method

	SuberrorUnsupportedHeaderCompressionMethod = C.heif_suberror_Unsupported_header_compression_method

	SuberrorUnsupportedBitDepth = C.heif_suberror_Unsupported_bit_depth

	SuberrorCannotWriteOutputData = C.heif_suberror_Cannot_write_output_data

	SuberrorEncoderInitialization = C.heif_suberror_Encoder_initialization

	SuberrorEncoderEncoding = C.heif_suberror_Encoder_encoding

	SuberrorEncoderCleanup = C.heif_suberror_Encoder_cleanup

	SuberrorTooManyRegions = C.heif_suberror_Too_many_regions
)

Variables

This section is empty.

Functions

func GetVersion

func GetVersion() string

Types

type Channel

type Channel C.enum_heif_channel

type Chroma

type Chroma C.enum_heif_chroma

type ChromaDownsamplingAlgorithm added in v1.1.0

type ChromaDownsamplingAlgorithm C.enum_heif_chroma_downsampling_algorithm

type ChromaUpsamplingAlgorithm added in v1.1.0

type ChromaUpsamplingAlgorithm C.enum_heif_chroma_upsampling_algorithm

type Colorspace

type Colorspace C.enum_heif_colorspace

type Context

type Context struct {
	// contains filtered or unexported fields
}

func EncodeFromImage

func EncodeFromImage(img image.Image, compression Compression, quality int, lossless LosslessMode, logging LoggingLevel) (*Context, error)

func NewContext

func NewContext() (*Context, error)

func (*Context) GetImageHandle

func (c *Context) GetImageHandle(id int) (*ImageHandle, error)

func (*Context) GetListOfTopLevelImageIDs

func (c *Context) GetListOfTopLevelImageIDs() []int

func (*Context) GetNumberOfTopLevelImages

func (c *Context) GetNumberOfTopLevelImages() int

func (*Context) GetPrimaryImageHandle

func (c *Context) GetPrimaryImageHandle() (*ImageHandle, error)

func (*Context) GetPrimaryImageID

func (c *Context) GetPrimaryImageID() (int, error)

func (*Context) IsTopLevelImageID

func (c *Context) IsTopLevelImageID(ID int) bool

func (*Context) NewEncoder

func (c *Context) NewEncoder(compression Compression) (*Encoder, error)

func (*Context) ReadFromFile

func (c *Context) ReadFromFile(filename string) error

func (*Context) ReadFromMemory

func (c *Context) ReadFromMemory(data []byte) error

func (*Context) WriteToFile

func (c *Context) WriteToFile(filename string) error

type DecodingOptions

type DecodingOptions struct {
	// contains filtered or unexported fields
}

func NewDecodingOptions

func NewDecodingOptions() (*DecodingOptions, error)

type Encoder

type Encoder struct {
	// contains filtered or unexported fields
}

func (*Encoder) ID

func (e *Encoder) ID() string

func (*Encoder) Name

func (e *Encoder) Name() string

func (*Encoder) SetLoggingLevel

func (e *Encoder) SetLoggingLevel(l LoggingLevel) error

func (*Encoder) SetLossless

func (e *Encoder) SetLossless(l LosslessMode) error

func (*Encoder) SetQuality

func (e *Encoder) SetQuality(q int) error

type EncodingOptions

type EncodingOptions struct {
	// contains filtered or unexported fields
}

func NewEncodingOptions

func NewEncodingOptions() (*EncodingOptions, error)

type ErrorCode

type ErrorCode C.enum_heif_error_code

type ErrorSubcode

type ErrorSubcode C.enum_heif_suberror_code

type HeifError

type HeifError struct {
	Code    ErrorCode
	Subcode ErrorSubcode
	Message string
}

func (*HeifError) Error

func (e *HeifError) Error() string

type Image

type Image struct {
	// contains filtered or unexported fields
}

func NewImage

func NewImage(width, height int, colorspace Colorspace, chroma Chroma) (*Image, error)

func (*Image) GetBitsPerPixel

func (img *Image) GetBitsPerPixel(channel Channel) int

func (*Image) GetBitsPerPixelRange

func (img *Image) GetBitsPerPixelRange(channel Channel) int

func (*Image) GetChromaFormat

func (img *Image) GetChromaFormat() Chroma

func (*Image) GetColorspace

func (img *Image) GetColorspace() Colorspace

func (*Image) GetHeight

func (img *Image) GetHeight(channel Channel) int

func (*Image) GetImage

func (img *Image) GetImage() (image.Image, error)

func (*Image) GetPlane

func (img *Image) GetPlane(channel Channel) (*ImageAccess, error)

func (*Image) GetWidth

func (img *Image) GetWidth(channel Channel) int

func (*Image) NewPlane

func (img *Image) NewPlane(channel Channel, width, height, depth int) (*ImageAccess, error)

func (*Image) ScaleImage

func (img *Image) ScaleImage(width int, height int) (*Image, error)

type ImageAccess

type ImageAccess struct {
	Plane []byte

	Stride int
	// contains filtered or unexported fields
}

type ImageHandle

type ImageHandle struct {
	// contains filtered or unexported fields
}

func (*ImageHandle) AppleSolarMap

func (h *ImageHandle) AppleSolarMap(mID MetadataID) (map[string]interface{}, error)

func (*ImageHandle) AppleTimesMap

func (h *ImageHandle) AppleTimesMap(mID MetadataID) (map[string]interface{}, error)

func (*ImageHandle) DecodeImage

func (h *ImageHandle) DecodeImage(colorspace Colorspace, chroma Chroma, options *DecodingOptions) (*Image, error)

func (*ImageHandle) ExifCount

func (h *ImageHandle) ExifCount() int

func (*ImageHandle) ExifIDs

func (h *ImageHandle) ExifIDs() []MetadataID

func (*ImageHandle) GetDepthImageHandle

func (h *ImageHandle) GetDepthImageHandle(depth_image_id int) (*ImageHandle, error)

func (*ImageHandle) GetHeight

func (h *ImageHandle) GetHeight() int

func (*ImageHandle) GetListOfDepthImageIDs

func (h *ImageHandle) GetListOfDepthImageIDs() []int

func (*ImageHandle) GetListOfThumbnailIDs

func (h *ImageHandle) GetListOfThumbnailIDs() []int

func (*ImageHandle) GetNumberOfDepthImages

func (h *ImageHandle) GetNumberOfDepthImages() int

func (*ImageHandle) GetNumberOfThumbnails

func (h *ImageHandle) GetNumberOfThumbnails() int

func (*ImageHandle) GetThumbnail

func (h *ImageHandle) GetThumbnail(thumbnail_id int) (*ImageHandle, error)

func (*ImageHandle) GetWidth

func (h *ImageHandle) GetWidth() int

func (*ImageHandle) HasAlphaChannel

func (h *ImageHandle) HasAlphaChannel() bool

func (*ImageHandle) HasDepthImage

func (h *ImageHandle) HasDepthImage() bool

func (*ImageHandle) ImageTimes

func (h *ImageHandle) ImageTimes(mID MetadataID) (ImageTimeTable, error)

ImageTimes returns the image times for a dynamic wallpaper.

func (*ImageHandle) IsPrimaryImage

func (h *ImageHandle) IsPrimaryImage() bool

func (*ImageHandle) Metadata

func (h *ImageHandle) Metadata(mID MetadataID) []byte

func (*ImageHandle) MetadataCount

func (h *ImageHandle) MetadataCount() int

func (*ImageHandle) MetadataIDs

func (h *ImageHandle) MetadataIDs() []MetadataID

func (*ImageHandle) MetadataMap

func (h *ImageHandle) MetadataMap(mID MetadataID, xs string) (map[string]interface{}, error)

MetadataMap takes a metadata ID and an XPath expression Within the metadata there may be XML, within the XML there may be a Base64 encoded string, and within the Base64 encoded string there may be a propery list in the Apple plist format and within that plist there may be a timestamp or solar position, encoded in the form of a property list. Oh joy.

type ImageTimeTable

type ImageTimeTable []time.Time

ImageTimeTable maps from image index to a time.Time that contains the hour and minute for a dynamic wallpaper image

type LoggingLevel

type LoggingLevel int
const (
	LoggingLevelNone LoggingLevel = iota
	LoggingLevelBasic
	LoggingLevelAdvanced
	LoggingLevelFull
)

type LosslessMode

type LosslessMode int
const (
	LosslessModeDisabled LosslessMode = iota
	LosslessModeEnabled
)

type MetadataID

type MetadataID uint

MetadataID contains an uint that represents the ID of a block of metadata

type ProgressStep

type ProgressStep C.enum_heif_progress_step

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL