如何在macOS的App Group中将NSImage存储为Data并还原?
在macOS中实现NSImage与Data的相互转换
基础可行方案(已验证的TIFF方式)
你尝试的通过tiffRepresentation将NSImage转为Data,再用NSImage(data:)还原的方法完全有效,代码示例如下:
将NSImage转换为Data:
let image = NSImage(named: "axl")! let imageData = image.tiffRepresentation!
从Data还原NSImage:
let imageData = entry.images[0] let image = NSImage(data: imageData)
可选:转换为PNG/JPG格式的Data(更小存储体积)
如果需要更紧凑的存储占用,可以将NSImage转换为PNG或JPG格式的Data,具体实现如下:
转换为PNG Data
func nsImageToPNGData(_ image: NSImage) -> Data? { guard let tiffData = image.tiffRepresentation, let bitmapImage = NSBitmapImageRep(data: tiffData) else { return nil } return bitmapImage.representation(using: .png, properties: [:]) } // 使用示例 if let pngData = nsImageToPNGData(NSImage(named: "axl")!) { // 将pngData存储到App Group }
转换为JPG Data
func nsImageToJPGData(_ image: NSImage, compressionQuality: CGFloat = 0.8) -> Data? { guard let tiffData = image.tiffRepresentation, let bitmapImage = NSBitmapImageRep(data: tiffData) else { return nil } let properties = [NSBitmapImageRep.PropertyKey.compressionFactor: compressionQuality] return bitmapImage.representation(using: .jpeg, properties: properties) } // 使用示例 if let jpgData = nsImageToJPGData(NSImage(named: "axl")!) { // 将jpgData存储到App Group }
从PNG/JPG Data还原NSImage
不管是PNG还是JPG格式的Data,都可以直接用NSImage(data:)方法还原,和TIFF格式的还原逻辑一致:
let image = NSImage(data: pngData) // 或传入jpgData
内容的提问来源于stack exchange,提问作者Patrick Koning
相关产品推荐
相关产品推荐

