我有一个我操纵过的CGImage,我希望将其写入文件(或者更确切地说,最终得到适合写入文件的NSData
表示)。我知道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中完成了其他所有事情,我必须走出它来获取文件表示。
最后,我不在乎一个平台返回一个PNG而另一个平台返回一个TIFF - 实际上这是为MKTileOverlay
创建一个平铺,所以要么会...
答案 0 :(得分:3)
您正在寻找ImageIO framework,这对于两个平台都是相同的(顺便提一下,将图像保存到文件的方式比现在更好)。
答案 1 :(得分:3)
非常感谢@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
}