Semantics¶
-
Chunk data is stored in
spng_ctx. -
All
spng_get_*()functions return 0 on success and non-zero error,SPNG_ECHUNKAVAILif the PNG does not contain that chunk or was not previously set. - A successful
spng_set_*()call will replace any previously set value or list, it does not combine chunk data from the file or multiplespng_set_*()calls.
The following apply to decoder contexts:
- When calling
spng_get_*()orspng_set_*()functions all chunks up to the first IDAT are read, validated then stored with the exception ofspng_get_ihdr(), which only reads the header. - When calling
spng_get_*()after the image has been decoded all chunks up to the IEND marker are read. spng_set_*()functions replace stored chunk data for that type.- Chunk data stored with
spng_set_*()functions are never replaced with input file chunk data i.e. if you set something it will stay that way.
API¶
spng_get_ihdr()¶
int spng_get_ihdr(spng_ctx *ctx, struct spng_ihdr *ihdr)
Get image header
spng_get_plte()¶
int spng_get_plte(spng_ctx *ctx, struct spng_plte *plte)
Get image palette
spng_get_trns()¶
int spng_get_trns(spng_ctx *ctx, struct spng_trns *trns)
Get image transparency
spng_get_chrm()¶
int spng_get_chrm(spng_ctx *ctx, struct spng_chrm *chrm)
Get primary chromacities and white point as floating point numbers
spng_get_chrm_int()¶
int spng_get_chrm_int(spng_ctx *ctx, struct spng_chrm_int *chrm_int)
Get primary chromacities and white point in PNG’s internal representation
spng_get_gama()¶
int spng_get_gama(spng_ctx *ctx, double *gamma)
Get image gamma
spng_get_gama_int()¶
int spng_get_gama_int(spng_ctx *ctx, uint32_t *gamma)
Get image gamma in PNG’s internal representation
spng_get_iccp()¶
int spng_get_iccp(spng_ctx *ctx, struct spng_iccp *iccp)
Get ICC profile
Note
ICC profiles are not validated.
spng_get_sbit()¶
int spng_get_sbit(spng_ctx *ctx, struct spng_sbit *sbit)
Get significant bits
spng_get_srgb()¶
int spng_get_srgb(spng_ctx *ctx, uint8_t *rendering_intent)
Get rendering intent
spng_get_text()¶
int spng_get_text(spng_ctx *ctx, struct spng_text *text, uint32_t *n_text)
Copies text information to text.
n_text should be greater than or equal to the number of stored text chunks.
If text is NULL and n_text is non-NULL then n_text is set to the number
of stored text chunks.
Strings may be zero-length (single '\0' character) with the exception of text.keyword,
all strings are guaranteed to be non-NULL.
Note
Due to the structure of PNG files it is recommended to call this function
after spng_decode_image() to retrieve all text chunks.
Warning
Text data is freed when calling spng_ctx_free().
spng_get_bkgd()¶
int spng_get_bkgd(spng_ctx *ctx, struct spng_bkgd *bkgd)
Get image background color
spng_get_hist()¶
int spng_get_hist(spng_ctx *ctx, struct spng_hist *hist)
Get image histogram
spng_get_phys()¶
int spng_get_phys(spng_ctx *ctx, struct spng_phys *phys)
Get physical pixel dimensions
spng_get_splt()¶
int spng_get_splt(spng_ctx *ctx, struct spng_splt *splt, uint32_t *n_splt)
Copies suggested palettes to splt.
n_splt should be greater than or equal to the number of stored sPLT chunks.
If splt is NULL and n_splt is non-NULL then n_splt is set to the number
of stored sPLT chunks.
Warning
Suggested palettes are freed when calling spng_ctx_free().
spng_get_time()¶
int spng_get_time(spng_ctx *ctx, struct spng_time *time)
Get modification time
Note
Due to the structure of PNG files it is recommended to call this function
after spng_decode_image().
spng_get_unknown_chunks()¶
int spng_get_unknown_chunks(spng_ctx *ctx, struct spng_unknown_chunk *chunks, uint32_t *n_chunks)
Copies unknown chunk information to chunks.
n_chunks should be greater than or equal to the number of stored unknown chunks.
If chunks is NULL and n_chunks is non-NULL then n_chunks is set to the number
of stored chunks.
Note
To retrieve all unknown chunks call this functions after spng_decode_image().
Warning
Chunk data is freed when calling spng_ctx_free().
spng_get_offs()¶
int spng_get_offs(spng_ctx *ctx, struct spng_offs *offs)
Get image offset
spng_get_exif()¶
int spng_get_exif(spng_ctx *ctx, struct spng_exif *exif)
Get EXIF data
Note
Due to the structure of PNG files it is recommended to call this function
after spng_decode_image().
Warning
exif.data is freed when calling spng_ctx_free().
spng_set_ihdr()¶
int spng_set_ihdr(spng_ctx *ctx, struct spng_ihdr *ihdr)
Set image header
spng_set_plte()¶
int spng_set_plte(spng_ctx *ctx, struct spng_plte *plte)
Set image palette
spng_set_trns()¶
int spng_set_trns(spng_ctx *ctx, struct spng_trns *trns)
Set transparency
spng_set_chrm()¶
int spng_set_chrm(spng_ctx *ctx, struct spng_chrm *chrm)
Set primary chromacities and white point as floating point numbers
spng_set_chrm_int()¶
int spng_set_chrm_int(spng_ctx *ctx, struct spng_chrm_int *chrm_int)
Set primary chromacities and white point in PNG’s internal representation
spng_set_gama()¶
int spng_set_gama(spng_ctx *ctx, double gamma)
Set image gamma
spng_set_gama_int()¶
int spng_set_gama_int(spng_ctx *ctx, uint32_t gamma)
Set image gamma in PNG’s internal representation
spng_set_iccp()¶
int spng_set_iccp(spng_ctx *ctx, struct spng_iccp *iccp)
Set ICC profile
spng_iccp.profile_name must only contain printable Latin-1 characters and spaces.
Leading, trailing, and consecutive spaces are not permitted.
Note
ICC profiles are not validated.
spng_set_sbit()¶
int spng_set_sbit(spng_ctx *ctx, struct spng_sbit *sbit)
Set significant bits
spng_set_srgb()¶
int spng_set_srgb(spng_ctx *ctx, uint8_t rendering_intent)
Set rendering intent
spng_set_text()¶
int spng_set_text(spng_ctx *ctx, struct spng_text *text, uint32_t n_text)
Set text data
text should point to an spng_text array of n_text elements.
spng_text.text must only contain Latin-1 characters.
Newlines must be a single linefeed character (decimal 10).
spng_text.translated_keyword must not contain linebreaks.
spng_text.compression_method must be zero.
spng_set_bkgd()¶
int spng_set_bkgd(spng_ctx *ctx, struct spng_bkgd *bkgd)
Set image background color
spng_set_hist()¶
int spng_set_hist(spng_ctx *ctx, struct spng_hist *hist)
Set image histogram
spng_set_phys()¶
int spng_set_phys(spng_ctx *ctx, struct spng_phys *phys)
Set physical pixel dimensions
spng_set_splt()¶
int spng_set_splt(spng_ctx *ctx, struct spng_splt *splt, uint32_t n_splt)
Set suggested palette(s).
splt should point to an spng_splt array of n_splt elements.
Note
splt should be a valid reference for the lifetime of the context.
spng_set_time()¶
int spng_set_time(spng_ctx *ctx, struct spng_time *time)
Set modification time
spng_set_unknown_chunks()¶
int spng_set_unknown_chunks(spng_ctx *ctx, struct spng_unknown_chunk *chunks, uint32_t n_chunks)
Set unknown chunk data.
Note
chunks should be a valid reference for the lifetime of the context.
spng_set_offs()¶
int spng_set_offs(spng_ctx *ctx, struct spng_offs *offs)
Set image offset
spng_set_exif()¶
int spng_set_exif(spng_ctx *ctx, struct spng_exif *exif)
Set EXIF data