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)。

有没有人知道如何在不依赖 exec 调用的情况下完成类似的事情,就像大多数 GUI 包装器所做的那样?

4

1 回答 1

0

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

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

于 2010-11-23T01:24:35.107 回答