lib spng ( s imple png )는 보안과 사용 편의성에 중점을 두고 PNG(이동식 네트워크 그래픽) 형식 파일을 읽고 쓰기 위한 C 라이브러리입니다.
libspng는 libpng의 대안이며 프로젝트는 별개이며 API는 호환되지 않습니다.
목표는 libpng보다 간단한 API를 갖춘 빠른 PNG 라이브러리를 제공하는 것입니다. 이는 일반적인 사용 사례에서 참조 구현보다 성능이 뛰어납니다.
특징 | spng | libpng | stb_이미지 | 로데프 |
---|---|---|---|---|
스트림에서 디코딩 | ✅ | ✅ | ✅ | |
감마 보정 | ✅ | ✅ | ||
알려진 보안 버그가 없습니다 [1] | ✅ | ✅ | ✅ | |
프로그레시브 이미지 읽기 | ✅ | ✅ | ||
모든 표준 청크를 구문 분석합니다. | ✅ | ✅ | ||
zlib가 필요하지 않습니다 [2] | ✅ | ✅ | ✅ | |
부호화 | ✅ | ✅ | ✅ | ✅ |
애니메이션 PNG | 예정 | ✅ [3] |
[1] 프로젝트는 OSS-Fuzz에서 퍼지 테스트를 거쳤으며 취약점은 공개되기 전에 수정되었습니다.
[2] miniz를 사용한 빌드가 지원됩니다.
[3] 타사 패치 사용
최신 릴리스를 다운로드하고 프로젝트에 spng.c/spng.h
포함하세요. CMake 또는 Meson을 사용하여 빌드할 수도 있습니다. 자세한 내용은 설명서를 참조하세요.
#include <spng.h>/* 디코더 컨텍스트 생성 */spng_ctx *ctx = spng_ctx_new(0);/* 입력 버퍼 설정 */spng_set_png_buffer(ctx, buf, buf_size);/* 출력 이미지 크기 결정 */spng_decoded_image_size (ctx, SPNG_FMT_RGBA8, &out_size);/* 8비트로 디코딩 RGBA */spng_decode_image(ctx, out, out_size, SPNG_FMT_RGBA8, 0);/* 여유 컨텍스트 메모리 */spng_ctx_free(ctx);/* 인코더 컨텍스트를 생성하려면 플래그가 필요합니다 */spng_ctx *enc = spng_ctx_new(SPNG_CTX_ENCODER);/* 라이브러리 */spng_set_option(enc, SPNG_ENCODE_TO_BUFFER, 1);/* 이미지 크기 지정, PNG 형식 */struct spng_ihdr ihdr ={ .너비 = 너비, .높이 = 높이, .bit_깊이 = 8, .color_type = SPNG_COLOR_TYPE_TRUECOLOR_ALPHA};/* 이미지는 ihdr.color_type, .bit_length에 따라 인코딩됩니다. */spng_set_ihdr(enc, &ihdr);/* SPNG_FMT_PNG는 ihdr의 형식과 일치하는 특수 값입니다. SPNG_ENCODE_FINALIZE는 다음을 사용하여 PNG를 마무리합니다. 파일 끝 표시 */spng_encode_image(enc, image, image_size, SPNG_FMT_PNG, SPNG_ENCODE_FINALIZE);/* PNG는 기본적으로 내부 버퍼에 기록됩니다. */void *png = spng_get_png_buffer(enc, &png_size, &error);/* 성공 후 사용자가 버퍼를 소유합니다. call */free(png);/* 비어 있는 컨텍스트 메모리 */spng_ctx_free(enc);
example.c를 참조하세요.
코드는 BSD 2절 "단순화" 라이센스에 따라 라이센스가 부여됩니다.
프로젝트에는 libpng의 최적화 및 테스트 이미지가 포함되어 있으며, 이는 PNG 참조 라이브러리 라이센스 버전 2에 따라 라이센스가 부여됩니다.
코드는 CERT C 코딩 표준의 규칙에 따라 작성됩니다. 모든 정수 연산에서 오버플로가 확인되고 모든 오류 조건이 정상적으로 처리됩니다.
라이브러리는 OSS-Fuzz에 의해 지속적으로 퍼지되고, Clang Static Analyser, Coverity Scan 및 PVS-Studio를 사용하여 코드도 스캔됩니다.
테스트 스위트는 1000개 이상의 테스트 사례로 구성되어 있으며, 175개의 테스트 이미지는 가능한 모든 출력 형식 및 플래그 조합으로 디코딩되고 정확성을 위해 libpng와 비교됩니다.
릴리스는 추가 보장과 함께 의미론적 버전 관리 체계를 따릅니다.
0.4.0에서 0.8.x까지의 릴리스는 안정적입니다.
1.0.0에 주요 변경 사항이 도입되면 0.8.x는 별도의 안정 분기로 유지됩니다.
현재 1.0.0이 호환될 예정입니다.
온라인 설명서는 libspng.org/docs에서 확인할 수 있습니다.
SPNG_FMT_G8
, SPNG_FMT_GA8
및 SPNG_FMT_GA16
출력 형식으로 디코딩하는 것은 모든 PNG 색상 유형 및 비트 깊이 조합에서 지원되지 않습니다. 자세한 내용은 설명서를 참조하세요.
SPNG_FMT_PNG
, SPNG_FMT_G8
, SPNG_FMT_GA8
및 SPNG_FMT_GA16
출력 형식에는 감마 보정이 구현되지 않습니다.
OpenCollective를 통해 개발을 후원할 수 있으며, 자금은 로드맵에 따라 유지 관리 및 추가 개발에 사용됩니다.
귀하의 조직과 함께 이 프로젝트를 지원하십시오. 귀하의 로고가 귀하의 웹사이트 링크와 함께 여기에 표시됩니다. [기여하다]