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
}
我有一个我操作过的 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
}