C++でjpegを手軽にエンコードしたいときのライブラリ
たまにはプログラミングネタでも。
品質と速度のバランスをとるなら stb_image_write が一番良い(2021年2月現在)
ヘッダひとつインクルードすればよいのでとても簡単。
ライセンスも緩く、Public DomainとMIT Licenseのデュアルライセンス(いずれかを選べる)。
もう一つ、個人的にはtoojpegも推したい。
手持ちのマシンでベンチマークテストをするとRGB画像についてはstb_image_writeの方が多少速いのだけど、生成されるJPEGの品質若干良い(量子化マトリクスの構成と計算方法によるもの)。フットプリントはこちらの方が小さい。
.cppがひとつだけなので、これをincludeすれば実質シングルヘッダライブラリと言えるでしょう。
なお、オリジナルの実装だとデータ出力のコールバックにコンテキスト情報を渡せなかったり(クラス内から呼び出すときに困る)、RGBA8888のようなフォーマットを渡せなかったりする(RenderTargetTextureをダンプするときにも困る)ので、そういった部分を解消したものはforkして公開している。
修正差分は次の3点。