本文目录导读:

- 使用
ImageWriter相关的 API(如CGImageDestination或NSImage/NSBitmapImageRep) - 使用
UIImageWriteToSavedPhotosAlbum(iOS/macCatalyst) - 使用
CGImageDestinationFinalize(Core Graphics 底层)
ImageWriter(通常指 macOS 或早期 iOS 中用于将图像写入磁盘或相册的 API 或类)本身不直接“保存”为特定格式,它通常是一个将内存中的图像数据写入指定文件或数据对象的接口。
具体保存成什么格式,取决于你如何调用它以及传入的数据类型,以下是几种常见情况下的格式对应关系:
使用 ImageWriter 相关的 API(如 CGImageDestination 或 NSImage/NSBitmapImageRep)
这是最常用的方式,你可以显式指定输出格式。
- JPEG (.jpg/.jpeg)
- 使用
kUTTypeJPEG作为类型标识符。 - 可以指定压缩质量(0.0 到 1.0)。
- 使用
- PNG (.png)
- 使用
kUTTypePNG。 - 无损压缩,支持透明通道。
- 使用
- TIFF (.tiff)
- 使用
kUTTypeTIFF。 - 常用于高质量图像保存或打印。
- 使用
- GIF (.gif)
- 使用
kUTTypeGIF。 - 支持动画帧。
- 使用
- BMP (.bmp)
- 使用
kUTTypeBMP。
- 使用
- HEIC/HEIF (.heic,macOS High Sierra / iOS 11 及以上)
- 使用
kUTTypeHEIC,这是苹果推荐的高效格式,支持无损/有损。
- 使用
代码示例(Swift,使用 ImageWriter 相关类):
// 假设你有一个 NSImage 或 CGImage let image = NSImage(named: "myImage")! // 转为 JPEG 并写入文件 let imageData = image.tiffRepresentation // 先转为 TIFF 数据 let bitmapRep = NSBitmapImageRep(data: imageData!)! let jpegData = bitmapRep.representation(using: .jpeg, properties: [.compressionFactor: 0.8]) try? jpegData?.write(to: URL(fileURLWithPath: "/path/to/output.jpg"))
注意: NSBitmapImageRep 的 representation(using:properties:) 方法允许你选择 NSBitmapImageRep.FileType(如 .jpeg, .png, .tiff, .bmp, .gif)。
使用 UIImageWriteToSavedPhotosAlbum(iOS/macCatalyst)
这是 UIKit 中一个非常方便的函数,专门用于将图像保存到系统相册。
- 保存格式: 不开发人员决定,由系统自动判断。
- 系统会根据图像内容选择 HEIC(如果设备支持且未禁用)或 JPEG。
- 对于带有透明通道的图像,可能会保存为 PNG。
- 参数: 你传入的是
UIImage对象,系统自己处理编码。
使用 CGImageDestinationFinalize(Core Graphics 底层)
这是最底层的图像写入方式,精度最高。
- 格式由类型标识符决定:你可以创建
CGImageDestination时指定UTType(如kUTTypeJPEG,kUTTypePNG等)。
| 使用场景 | 典型 API/方法 | 保存的默认格式 | 能否指定格式? |
|---|---|---|---|
| iOS 保存到相册 | UIImageWriteToSavedPhotosAlbum |
HEIC 或 JPEG(系统决定) | 不能直接指定 |
| macOS 写入文件 | NSBitmapImageRep.representation |
需要你指定(如 .jpeg) |
能 |
| 通用 Core Graphics | CGImageDestination |
由你传入的 UTType 决定 |
能 |
| 旧的 ImageWriter 类(经典 Mac OS) | 已弃用 | 用户手动选择格式 | 早期版本固定为 PICT 或 TIFF |
如果你是在问 macOS 的「Image Capture」或「ImageWriter」打印机驱动:
- 那是指打印机驱动程序,它接收图像后,会将其转换为打印机理解的页面描述语言(如 PostScript 或 PCL),不是保存为普通图像文件格式,最终打印出来的物理纸张是不存在格式的。
一句话结论: ImageWriter 本身不保存格式,是你调用它时指定的图片类型(JPEG、PNG、TIFF、HEIC 等)决定了最终保存的格式,最常用的现代格式是 HEIC(苹果生态)和 JPEG/PNG(跨平台)。