我目前有一个带有有效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调用有任何想法?

最佳答案

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

您可以在terminal.app中使用“ man 2 mkfifo”阅读有关mkfifo()的信息。

07-24 14:18