You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 02:20:56