NSImageRep 是 macOS 中用于表示图像的一种抽象基类,定义了图像的“表示方式”(representation),它是 图像数据的底层载体。
可以理解为:
NSImage 是图像的“容器”。
一个 NSImage 可以包含多个 NSImageRep 对象(比如 bitmap、PDF、vector、@2x 等多种表示)。
NSImageRep 是抽象类,具体子类才承载实际图像数据,如:
1、NSBitmapImageRep:用于位图图像,支持压缩、编码等操作(最常用)。
2、NSPDFImageRep:用于 PDF 图像表示(矢量)。
3、NSEPSImageRep:表示 EPS 图像。
4、NSCIImageRep:用于 Core Image 图像。
5、NSCustomImageRep:用于自定义绘图行为。
6、NSCachedImageRep:为视图缓存渲染内容。
常用属性
在子类中也可以访问这些属性。
1、pixelsWide / pixelsHigh:像素宽高。
2、size:点(point)尺寸。
3、hasAlpha:是否包含 alpha 通道。
4、colorSpaceName:色彩空间(如 .deviceRGB)。
5、bitsPerSample / samplesPerPixel:每个像素的位数、颜色通道数。
使用场景
1、压缩图片 → JPEG/PNG:使用 NSBitmapImageRep。
2、加载 PDF → 渲染图像:使用 NSPDFImageRep。
3、获取图片尺寸:从 NSImageRep 获取像素尺寸。
4、多分辨率图像处理(@2x/@3x):每个分辨率是一个 ImageRep。
5、自定义绘图输出图像:使用 NSCustomImageRep。
使用示例
1、从NSImage中获取NSImageRep
let image = NSImage(named: "example")!
if let reps = image.representations.first {
print("图像尺寸:\(reps.pixelsWide) x \(reps.pixelsHigh)")
}
2、获取 NSBitmapImageRep 来做压缩
if let tiff = image.tiffRepresentation,
let bitmap = NSBitmapImageRep(data: tiff) {
let jpegData = bitmap.representation(using: .jpeg, properties: [.compressionFactor: 0.7])
}
总结
NSImage是图像容器,包含多个NSImageRep表示方式,NSImageRep是图像数据的抽象表示类,实际使用的是其子类。
主要功能为:读取图像元信息、压缩、编码、保存、像素访问等。
相关文章
MacOS图像显示类NSImage:https://fangjunyu.com/2024/11/22/macos%e5%9b%be%e5%83%8f%e6%98%be%e7%a4%ba%e7%b1%bbnsimage/