我目前有一个带有有效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()的信息。