3

所以,这就是我需要的:

  • 拿一个NSImage
  • 尽量压缩(无损压缩,质量没有明显下降)
  • 将其保存回磁盘

过去,我尝试使用 OptiPNG - 作为编译的二进制文件(并异步获取结果) - 这很有效。

但是,如果我不想要带有外部应用程序的类似终端的解决方案,而是想要更多 Cocoa-native 的解决方案怎么办?

有任何想法吗?

4

1 回答 1

-1
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 要求的那样。

于 2020-02-28T11:32:59.920 回答