Image I/O提供了从源(CGImageSourceRef)处读取图片数据的不透明数据类型,以及把图片数据写入到目标地点(CGImageDestinationRef)。它能支持大部分的图片格式,包括标准网页格式,高动态范围成像,以及原始的相机数据。Image I/O具备的其他功能如下:
- 在Mac平台下的高速编码解码图片
- 逐步加载图片
- 支持图片元数据
- 有效的缓存
我们可以使用如下的方式来创建图片源和目标图像对象:
- URL,一个可以充当图像数据的提供者或者接受者的图片URL。
- CoreFoundation下的CFDataRef和CFMutableDataRef对象。
- 数据使用者(CGDataConsumerRef)和数据提供者(CGDataProviderRef)
在程序中使用Image I/O框架
Image I/O在OS X中存在于iOS中的Image I/O framework。在将框架添加到程序之后,导入相应的头文件。如下:
#import <ImageIO/ImageIO.h>
支持的图片格式
Image I/O能够理解大部分的图片文件格式,比如JPEG,JPEG2000,RAW,TIFF,BMP和PNG,但是并不是支持每一个平台的所有格式。如果想要知道Image I/O支持的类型,我们可以调用下面这些方法:
- CGImageSourceCopyTypeIdentifiers,它返回一个Image I/O作为图片源数据统一类型标识符(注:见附录《统一类型标识符》)的数组。
- CGImageDestinationCopyTypeIdentifiers,而它返回的是作为图片目标对象所支持的统一类型标识符数组。
我们可以在Xcode中使用CFShow在调试的时候来打印这些数组,这些方法返回的数组中字符串类似于com.apple.pict
,public.jpeg
,public.tiff
等等。在下面的表中的UTI列出了一些公共的图片文件格式。在OS X和iOS中为公共的图片文件格式定义了相应的常量。这些所有的设置常量在UTCoreTypes.h
头文件中(#import<MobileCoreServices/UTCoreTypes.h>
)。我们可以在指明图片类型的时候使用这些常量,把他们作为图像源或者目标图像的类型。
CFArrayRef mySourceTypes = CGImageSourceCopyTypeIdentifiers();
CFShow(mySourceTypes);
CFArrayRef myDestinationTypes = CGImageDestinationCopyTypeIdentifiers();
CFShow(myDestinationTypes);
UTI | 图像类型常量 |
---|---|
public.image | kUTTypeImage |
public.png | kUTTypePNG |
public.jpeg | kUTTypeJPEG |
public.jpeg-2000 (OS X only) | kUTTypeJPEG2000 |
public.tiff | kUTTypeTIFF |
com.apple.pict (OS X only) | kUTTypePICT |
com.compuserve.gif | kUTTypeGIF |