2010-11-22 46 views
1

我現在有一個NSData與有效PNG數據:
NSData* imageData = [bitmapRep representationUsingType:NSPNGFileType properties:nil];作爲NSData在內存中無損壓縮PNG?

我寫這個數據到一個文件:
[imageData writeToFile:@"test.png" atomically:YES];
而且隨着使用OptiPNG或PNGCrush壓縮它產生有希望的結果(25%+壓縮)。

我想執行內存這項任務,增加了類別NSData的啓用是這樣的:
[imageData optimizePNGData]

然而,文件系統調用烤深入到雙方使用OptiPNG和PNGCrush,使得兩者都不它們適合作爲一個圖書館(例如optipng.a)。

有沒有人有任何想法,如何實現類似的東西,而不依賴於exec調用,因爲大部分的GUI包裝呢?

回答

0

如果您可以構建這些庫並將它們鏈接到您的進程中,但問題是它們在路徑上而不是字節塊上運行,則可以使用mkfifo創建一個命名管道,然後爲管道的一端提供數據從你的過程中,將另一端傳遞給OptiPNG或PNGCrush的功能。您需要在調用庫的過程中不斷地輸入管道,因此您可能需要第二個線程。

你可以在terminal.app中用「man 2 mkfifo」閱讀mkfifo()。