Core Graphics 替代 UIImage/NSImage 文件表示

Core Graphics alternative to UIImage/NSImage file representations

我有一个我操作过的 CGImage,我希望将它写入文件(或者更确切地说,最终得到一个适合写入文件的 NSData 表示)。我知道 "how" 可以在 OSX 和 iOS 中执行此操作,但只使用依赖于平台的调用,而不是 Core Graphics 调用。我找不到任何关于如何以独立于平台的方式执行此操作的文档。这是我拥有的:

func newImageData() -> NSData? {
    var newImageRef: CGImage
    // ...
    // Create & manipulate newImageRef
    // ...
    #if os(iOS)
        let newImage = UIImage(CGImage: newImageRef, scale: 1, orientation: 0)
        return UIImagePNGRepresentation(newImage)
    #elseif os(OSX)
        let newImage = NSImage(CGImage: newImageRef, size: NSSize(width: width, height: height))
        return newImage.TIFFRepresentation
    #endif
}

明确一点 - 上面的代码工作正常,我只是很沮丧,因为在 CG 中完成了所有其他工作,我必须退出它才能获得文件表示。

最后,我不在乎一个平台 returns 是 PNG,另一个平台是 TIFF - 事实上,这是为 MKTileOverlay 创建一个图块,所以两者都可以......

您正在寻找 ImageIO framework,这对两个平台都是相同的(而且,顺便说一句,这是一种比您现在正在做的更好的将图像保存到文件的方法)。

非常感谢@Matt 为我指明了正确的方向 - ImageIO framework

我需要的是这个:

let dataOut = CFDataCreateMutable(nil, CFIndex(byteCount))
if let iDest = CGImageDestinationCreateWithData(dataOut, kUTTypePNG, 1, nil) {            
    let options: [NSObject: AnyObject] = [
                kCGImagePropertyOrientation : 1, // Top left
                kCGImagePropertyHasAlpha : true,
                kCGImageDestinationLossyCompressionQuality : 1.0
            ]

    CGImageDestinationAddImage(iDest, newImageRef, options)
    CGImageDestinationFinalize(iDest)
    return dataOut
} else {
    print("Failed to create image destination")
    return nil
}