C++でjpegを手軽にエンコードしたいときのライブラリ

たまにはプログラミングネタでも。

 

品質と速度のバランスをとるなら stb_image_write が一番良い(2021年2月現在)

github.com

ヘッダひとつインクルードすればよいのでとても簡単。
ライセンスも緩く、Public DomainとMIT Licenseのデュアルライセンス(いずれかを選べる)。

 

もう一つ、個人的にはtoojpegも推したい。
手持ちのマシンでベンチマークテストをするとRGB画像についてはstb_image_writeの方が多少速いのだけど、生成されるJPEGの品質若干良い(量子化マトリクスの構成と計算方法によるもの)。フットプリントはこちらの方が小さい。

 .cppがひとつだけなので、これをincludeすれば実質シングルヘッダライブラリと言えるでしょう。 

create.stephan-brumme.com

 

なお、オリジナルの実装だとデータ出力のコールバックにコンテキスト情報を渡せなかったり(クラス内から呼び出すときに困る)、RGBA8888のようなフォーマットを渡せなかったりする(RenderTargetTextureをダンプするときにも困る)ので、そういった部分を解消したものはforkして公開している。

github.com

 

修正差分は次の3点。

github.com

 

github.com

 

github.com