作为NSData在内存中无损压缩PNG?

问题描述:

我现在有一个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包装呢?

如果您可以构建这些库并将它们链接到您的进程中,但问题是它们在路径上而不是字节块上运行,则可以使用mkfifo创建一个命名管道,然后为管道的一端提供数据从你的过程中,将另一端传递给OptiPNG或PNGCrush的功能。您需要在调用库的过程中不断地输入管道,因此您可能需要第二个线程。

你可以在terminal.app中用“man 2 mkfifo”阅读mkfifo()。