libspng 是一个 C语言的开发库,用来读写 PNG 格式图片,特点是安全而且易用。
libspng 目标是提供一个快速的 PNG 库,其 API 与 libpng 相同。
下图是几个 png 库的性能比较:
功能比较:
Feature | libspng | libpng | stb_image | lodepng |
---|---|---|---|---|
Decode to RGBA8/16 | ✓ | ✓ | ✓ | ✓ |
Decode from stream | ✓ | ✓ | ✓ | X |
Gamma correction | ✓ | ✓ | X | X |
Fuzzed by OSS-Fuzz | ✓ | ✓ | X | ✓ |
Progressive read | X* | ✓ | X | X |
Doesn't require zlib | X | X | ✓ | ✓ |
Encoding | X* | ✓ | ✓ | ✓ |
Animated PNG | X* | ✓** | X | X |
* 计划阶段的特性
** 第三方补丁
示例代码:
/* Create a context */
spng_ctx *ctx = spng_ctx_new(0);
/* Set an input buffer */
spng_set_png_buffer(ctx, buf, buf_size);
/* Determine output image size */
spng_decoded_image_size(ctx, SPNG_FMT_RGBA8, &out_size);
/* Decode to 8-bit RGBA */
spng_decode_image(ctx, out, out_size, SPNG_FMT_RGBA8, 0);
/* Free context memory */
spng_ctx_free(ctx);