lib spng ( simple png ) は、セキュリティと使いやすさに重点を置いたポータブル ネットワーク グラフィックス (PNG) 形式のファイルを読み書きするための C ライブラリです。
libspng は libpng の代替であり、プロジェクトは別個であり、API には互換性がありません。
目標は、libpng よりもシンプルな API を備えた高速 PNG ライブラリを提供することであり、一般的な使用例ではリファレンス実装よりも優れたパフォーマンスを発揮します。
特徴 | スプング | libpng | stb_image | ロデプング |
---|---|---|---|---|
ストリームからデコードする | ✅ | ✅ | ✅ | |
ガンマ補正 | ✅ | ✅ | ||
既知のセキュリティ バグはありません[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 ={ .width = 幅、 .height = 高さ、 .bit_ Depth = 8、 .color_type = SPNG_COLOR_TYPE_TRUECOLOR_ALPHA};/* 画像は ihdr.color_type、.bit_ Depth に従ってエンコードされます */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);
例.c を参照してください。
コードは、BSD 2 条項「簡易」ライセンスに基づいてライセンスされています。
プロジェクトには libpng からの最適化とテスト イメージが含まれており、これらは PNG Reference Library License バージョン 2 に基づいてライセンスされています。
コードは、CERT C コーディング標準の規則に従って記述されます。すべての整数演算でオーバーフローがチェックされ、すべてのエラー状態が適切に処理されます。
ライブラリは OSS-Fuzz によって継続的にファジングされ、コードは Clang Static Analyzer、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 を通じて開発のスポンサーになることができ、資金はロードマップに従ってメンテナンスとさらなる開発に使用されます。
あなたの組織でこのプロジェクトをサポートしてください。あなたのロゴが Web サイトへのリンクとともにここに表示されます。 [貢献する]