所以,这就是我需要的:
- 拿一个
NSImage
- 尽量压缩(无损压缩,质量没有明显下降)
- 将其保存回磁盘
过去,我尝试使用 OptiPNG - 作为编译的二进制文件(并异步获取结果) - 这很有效。
但是,如果我不想要带有外部应用程序的类似终端的解决方案,而是想要更多 Cocoa-native 的解决方案怎么办?
有任何想法吗?
所以,这就是我需要的:
NSImage
过去,我尝试使用 OptiPNG - 作为编译的二进制文件(并异步获取结果) - 这很有效。
但是,如果我不想要带有外部应用程序的类似终端的解决方案,而是想要更多 Cocoa-native 的解决方案怎么办?
有任何想法吗?
NSImage* image; // your NSImage
// With compression
NSData* data = [image
TIFFRepresentationUsingCompression:NSTIFFCompressionLZW
factor:0.5f]; // you can change factor between 0 and 1.0 for preferred compression rate
if (data != nil) {
NSBitmapImageRep* bitmap = [[NSBitmapImageRep alloc] initWithData:data];
if (bitmap != nil) {
NSData* bitmapData = [bitmap
representationUsingType:NSBitmapImageFileTypePNG
properties:@{}];
if (bitmapData != nil) {
[bitmapData
writeToFile:<file_path> //path where to save png
atomically:true];
}
}
}
更新:如评论中所述,这不会压缩 png。
但是,我在 ShareExtension 中使用了此代码,它可以很好地压缩接收到的屏幕截图(如果使用representationUsingType 保存为0.4-0.7MB,则从1.1-1.5MB 到0.4-0.7MB)并且没有质量损失,就像OP 要求的那样。