如何使用Cocoa压缩PNG图像?

时间:2012-09-08 13:05:20

标签: objective-c cocoa png image-optimization

所以,这就是我需要的:

  • 选择NSImage
  • 尽可能压缩它(无损压缩,质量没有明显下降)
  • 将其保存回磁盘

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

然而,如果我不想要一个类似终端的解决方案与外部应用程序,但更多的Cocoa本地?

有什么想法吗?

1 个答案:

答案 0 :(得分:-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中使用了此代码,它很好地压缩了收到的屏幕截图(如果使用明文保存,则可以从1.1-1.5MB压缩到使用presentationUsingType的0.4-0.7MB),并且没有质量损失,就像OP要求的那样。