私は大量の画像のサイズを変更する必要があるアプリケーションを書いています...そしてこれらは私の要件です:
これまでのところ、私のオプションは次のとおりです。
これらのすべてが仕事を成し遂げるでしょう、しかし私はここで最速を探しています、そして私はそれらのパフォーマンスに関するベンチマークを見つけることができませんでした。
見てください Intel IPP(Integrated Performance Primitives) (WikiリンクはIntelのものよりも優れています...)AMDでも機能し、画像のサイズを変更する機能があります(双線形、最近傍など) LinuxとWindowsで動作します。
それは無料ではありませんが(しかしそれは銀行を壊すことはありません)、あなたが見つけることができる最も速いです。
VIPSを見てください。これは私がこれまでに見つけた中で最速のものです。
[〜#〜] ipp [〜#〜] が 必要なもの (たとえばセクション12の関数Resize)を実行する場合、大幅に高速なx86コードが見つかるとは思えません。どこか他の。ただし、AMD CPUで実行すると、低速の「リファレンス実装」にフォールバックする可能性があることに注意してください。
CPUがパフォーマンス要件を満たしていない場合は、OpenGLを使用してGPUにサイズ変更をプッシュすることを検討してください(テクスチャマッピングを使用する最も単純な実装は、ハードウェア補間器の恩恵を受けます。より複雑なフィルタリングでは、GLSLシェーダーコードを使用します)。この種のことをCPUよりも約100倍高速に実行する(ゼロを与えるまたは取る)GPUの能力は、カードとの間の比較的遅いデータ転送(通常は1秒あたり1〜2ギガバイト)と比較検討する必要があります。せいぜい)。
@Chris Beckeのコメント:
「そのステートメントについて少し考えてみてください。単一の(複雑な)ステップでそれを実行すると、それがさらに高速になりますか?画像デコードルーチンは、フィルタールーチンがピクセルをフィルター処理するために、すべてのピクセルをデコードする必要があります。 「」
常にそうであるとは限りません。たとえば、JPEGをデコードするときに、JPEGライブラリに1/2、1/4、1/8サイズの画像(またはそのようなもの。詳細を調べてからしばらく経ちます)を提供するように依頼できます。 JPEGの動作方法により、余分な詳細をまったくデコードする必要はありません。フルデコード+スケールよりもはるかに高速です。
(明らかに、小さい画像が希望する正確なサイズでない場合は、後で少し拡大縮小する必要があります。)
(申し訳ありませんが、この返信は返信がないためコメントとしてのみ投稿できます。初めてここに何かを投稿しようとしました。誰かがこれまたは同様のコメントとして再投稿して私の回答を削除したい場合は、お気軽に!)
オープンソースを探しているなら、FreeImageはどうですか?商用のものには、Snowboundを使用します。どちらも非常に高速で、さまざまな画像形式とサイズ変更アルゴリズムに対応しています。
無料のものを探していて、物事をすばやくやりたい場合は、Gimp Cでコンパイルされたプラグインを開発してみてください:これは非常に簡単で、Gimpはサイズ変更に優れていると思います:
これはサイズ変更が最速ではないかもしれませんが、開発が最も安価(無料)で最速です。
見てください そこに 。