1

現在、有効な PNG データを含む NSData があります。
NSData* imageData = [bitmapRep representationUsingType:NSPNGFileType properties:nil];

このデータをファイル
[imageData writeToFile:@"test.png" atomically:YES];
に書き出しました。OptiPNG または PNGCrush で圧縮すると、有望な結果が得られます (25% 以上の圧縮)。

このタスクをメモリ内で実行し、カテゴリを NSData に追加して、次のようなものを有効にしたいと思います。
[imageData optimizePNGData]

ただし、ファイル システム コールは OptiPNG と PNGCrush の両方に深く組み込まれているため、どちらもライブラリとしてビルドするのに適していません (例: optipng.a)。

ほとんどの GUI ラッパーが行うように、exec 呼び出しに依存せずに同様のことを達成する方法について、誰かアイデアはありますか?

4

1 に答える 1

0

これらのライブラリを構築してプロセスにリンクすることはできても、それらがバイトのブロックではなくパスで動作することが問題である場合は、mkfifo を使用して名前付きパイプを作成し、パイプの一端にプロセスからのデータをフィードして、もう一方の端を OptiPNG または PNGCrush から関数に渡します。ライブラリへの呼び出し中に継続的にパイプをフィードする必要があるため、おそらく 2 つ目のスレッドが必要になります。

terminal.app の「man 2 mkfifo」で mkfifo() について読むことができます。

于 2010-11-23T01:24:35.107 に答える