ImageIO

作者: 一川烟草i蓑衣 | 来源:发表于2019-09-26 19:29 被阅读0次

    一、引言

    ImageIO框架提供了读取与写入图片数据的基本方法,使用它可以直接获取到图片文件的内容数据,ImageIO框架中包含6个头文件,其中完成主要功能的是前两个头文件中定义的方法:

    1.CGImageSource.h:负责读取图片数据。

    2.CGImageDestination.h:负责写入图片数据。

    3.CGImageMetadata.h:图片文件元数据类。

    4.CGImageProperties:定义了框架中使用的字符串常量和宏。

    5.ImageIOBase.h:预处理逻辑,无需关心。

    二、CGImageSource详解

     CGImageSource类的主要作用是用来读取图片数据,在平时开发中,关于图片我们使用的最多的可能是UIImage类,UIImage是iOS系统UI系统中用于构建图像对象的类,但是其中只有图像数据,实际上一个图片文件中存储的除了图片数据外,还有一些地理位置、设备类型、时间等信息,除此之外,一个图片文件中可能存储的也不只一张图像(例如gif文件)。CGImageSource就是这样的一个抽象图片数据示例,从其中可以获取到我们所关心的所有数据。

    读取图片文件数据,并将其展示在视图的简单代码示例如下:

    //获取图片文件路径

    NSString * path = [[NSBundle mainBundle]pathForResource:@"timg" ofType:@"jpeg"];

    NSURL * url = [NSURL fileURLWithPath:path];

    CGImageRef myImage = NULL;

    CGImageSourceRef myImageSource;

    //通过文件路径创建CGImageSource对象

    myImageSource = CGImageSourceCreateWithURL((CFURLRef)url, NULL);

    //获取第一张图片

    myImage = CGImageSourceCreateImageAtIndex(myImageSource,0, NULL);

    CFRelease(myImageSource);

    UIImageView * image = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 200, 200)];

    image.image = [UIImage imageWithCGImage:myImage];

    [self.view addSubview:image];

    上面的示例代码采用的是本地的一个素材文件,当然通过网络图片链接也是可以创建CGImageSource独享的。除了通过URL链接的方式创建对象,ImageIO框架中还提供了两种方法,解析如下:

    //通过数据提供器创建CGImageSource对象

    /*

    CGDataProviderRef是CoreGraphics框架中的一个数据读取类,其也可以通过Data数据,URL和文件名来创建

    */

    CGImageSourceRef __nullable CGImageSourceCreateWithDataProvider(CGDataProviderRef __nonnull provider, CFDictionaryRef __nullable options);

    //通过Data数据创建CGImageSource对象

    CGImageSourceRef __nullable CGImageSourceCreateWithData(CFDataRef __nonnull data, CFDictionaryRef __nullable options);

    需要注意,上面所提到的所有创建CGImageSource的方法中都可以传入一个CFDictionaryRef类型的字典,可以配置的键值意义如下:

    /*

    设置一个预期的图片文件格式,需要设置为字符串类型的值

    */

    const CFStringRef kCGImageSourceTypeIdentifierHint;

    /*

    设置是否以解码的方式读取图片数据 默认为kCFBooleanTrue

    如果设置为true,在读取数据时就进行解码 如果为false 则在渲染时才进行解码

    */

    const CFStringRef kCGImageSourceShouldCache;

    /*

    返回CGImage对象时是否允许使用浮点值 默认为kCFBooleanFalse

    */

    const CFStringRef kCGImageSourceShouldAllowFloat;

    /*

    设置如果不存在缩略图则创建一个缩略图,缩略图的尺寸受开发者设置影响,如果不设置尺寸极限,则为图片本身大小

    默认为kCFBooleanFalse

    */

    const CFStringRef kCGImageSourceCreateThumbnailFromImageIfAbsent;

    /*

    设置是否创建缩略图,无论原图像有没有包含缩略图kCFBooleanFalse

    */

    const CFStringRef kCGImageSourceCreateThumbnailFromImageAlways;

    /*

    设置缩略图的宽高尺寸 需要设置为CFNumber值

    */

    const CFStringRef kCGImageSourceThumbnailMaxPixelSize;

    /*

    设置缩略图是否进行Transfrom变换

    */

    const CFStringRef kCGImageSourceCreateThumbnailWithTransform;

    CGImageSource类中其他方法解析如下:

    //获取CGImageSource类在CoreFundation框架中的id

    CFTypeID CGImageSourceGetTypeID (void);

    //获取所支持的图片格式数组

    CFArrayRef __nonnull CGImageSourceCopyTypeIdentifiers(void);

    //获取CGImageSource对象的图片格式

    CFStringRef __nullable CGImageSourceGetType(CGImageSourceRef __nonnull isrc);

    //获取CGImageSource中的图片张数 不包括缩略图

    size_t CGImageSourceGetCount(CGImageSourceRef __nonnull isrc);

    //获取CGImageSource的文件信息

    /*

    字典参数可配置的键值对与创建CGImageSource所传参数意义一致

    返回的字典中的键值意义后面介绍

    */

    CFDictionaryRef __nullable CGImageSourceCopyProperties(CGImageSourceRef __nonnull isrc, CFDictionaryRef __nullable options);

    //获取CGImageSource中某个图像的附加数据

    /*

    index参数设置获取第几张图像 options参数可配置的键值对与创建CGImageSource所传参数意义一致

    返回的字典中的键值意义后面介绍

    */

    CFDictionaryRef __nullable CGImageSourceCopyPropertiesAtIndex(CGImageSourceRef __nonnull isrc, size_t index, CFDictionaryRef __nullable options);

    //获取图片的元数据信息 CGImageMetadataRef类是图像原数据的抽象

    CGImageMetadataRef __nullable CGImageSourceCopyMetadataAtIndex (CGImageSourceRef __nonnull isrc, size_t index, CFDictionaryRef __nullable options);

    //获取CGImageSource中的图片数据

    CGImageRef __nullable CGImageSourceCreateImageAtIndex(CGImageSourceRef __nonnull isrc, size_t index, CFDictionaryRef __nullable options);

    //删除一个指定索引图像的缓存

    void CGImageSourceRemoveCacheAtIndex(CGImageSourceRef __nonnull isrc, size_t index);

    //获取某一帧图片的缩略图

    CGImageRef __nullable CGImageSourceCreateThumbnailAtIndex(CGImageSourceRef __nonnull isrc, size_t index, CFDictionaryRef __nullable options);

    //创建一个空的CGImageSource容器,逐步加载大图片

    CGImageSourceRef __nonnull CGImageSourceCreateIncremental(CFDictionaryRef __nullable options);

    //使用新的数据更新CGImageSource容器

    void CGImageSourceUpdateData(CGImageSourceRef __nonnull isrc, CFDataRef __nonnull data, bool final);

    //更新数据提供器来填充CGImageSource容器

    void CGImageSourceUpdateDataProvider(CGImageSourceRef __nonnull isrc, CGDataProviderRef __nonnull provider, bool final);

    //获取当前CGImageSource的状态

    /*

    CGImageSourceStatus枚举意义:

    typedef CF_ENUM(int32_t, CGImageSourceStatus) {

        kCGImageStatusUnexpectedEOF = -5, //文件结尾出错

        kCGImageStatusInvalidData = -4,  //数据无效

        kCGImageStatusUnknownType = -3,  //未知的图片类型

        kCGImageStatusReadingHeader = -2, //读标题过程中

        kCGImageStatusIncomplete = -1,    //操作不完整

        kCGImageStatusComplete = 0        //操作完整

    };

    */

    CGImageSourceStatus CGImageSourceGetStatus(CGImageSourceRef __nonnull isrc);

    //同上,获取某一个图片的状态

    CGImageSourceStatus CGImageSourceGetStatusAtIndex(CGImageSourceRef __nonnull isrc, size_t index);

    三、CGImageDestination详解

    CGImageSource是图片文件数据的抽象对象,而CGImageDestination的作用则是将抽象的图片数据写入指定的目标中。将图片写成文件示例如下:

    //创建存储路径

    NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);

    NSString *newPath = [paths.firstObject stringByAppendingPathComponent:[NSString stringWithFormat:@"image.png"]];

    CFURLRef URL =  CFURLCreateWithFileSystemPath (

                                      kCFAllocatorDefault,

                                      (CFStringRef)newPath,

                                      kCFURLPOSIXPathStyle,

                                      false);

    //创建CGImageDestination对象

    CGImageDestinationRef myImageDest = CGImageDestinationCreateWithURL(URL,CFSTR("public.png"), 1, NULL);

    UIImage * image = [UIImage imageNamed:@"timg.jpeg"];

    //写入图片

    CGImageDestinationAddImage(myImageDest, image.CGImage, NULL);

    CGImageDestinationFinalize(myImageDest);

    CFRelease(myImageDest);

    同样,除了可以直接将图片数据写入url外,也可以Data数据或数据消费器,方法如下:

    //将图片数据写入数据消费者

    CGImageDestinationRef __nullable CGImageDestinationCreateWithDataConsumer(CGDataConsumerRef __nonnull consumer, CFStringRef __nonnull type, size_t count, CFDictionaryRef __nullable options);

    //将图片数据写入Data

    CGImageDestinationRef __nullable CGImageDestinationCreateWithData(CFMutableDataRef __nonnull data, CFStringRef __nonnull type, size_t count, CFDictionaryRef __nullable options);

    需要注意,上面方法的type参数设置写入数据的文件格式,必须为ImageIO框架所支持的格式,前面有方法可以获取所有支持的格式,还有一点,这3个写入方法的中options参数目前并没有什么作用,其是留给未来使用的,目前传入NULL即可。

    CGImageDestination类中的其他方法解析如下:

    //获取CGImageDestination的CFTypeID

    CFTypeID CGImageDestinationGetTypeID(void);

    //获取CGImageDestination所支持的图片文件类型

    /*

    目前支持如下:iOS10.1

    (

        "public.jpeg",

        "public.png",

        "com.compuserve.gif",

        "public.tiff",

        "public.jpeg-2000",

        "com.microsoft.ico",

        "com.microsoft.bmp",

        "com.adobe.photoshop-image",

        "com.adobe.pdf",

        "com.truevision.tga-image",

        "com.ilm.openexr-image",

        "public.pbm",

        "public.pvr",

        "org.khronos.astc",

        "org.khronos.ktx",

        "com.microsoft.dds",

        "com.apple.rjpeg"

    )

    */

    CFArrayRef __nonnull CGImageDestinationCopyTypeIdentifiers(void);

    //设置图片文件属性

    /*

    可以设置的键值对意义如下:

    const CFStringRef kCGImageDestinationLossyCompressionQuality; //设置压缩质量 0-1之间的cfnumberref值

    const CFStringRef kCGImageDestinationBackgroundColor;  //将图片数据写为无alpha通道时的默认背景色 cgcolor值

    */

    void CGImageDestinationSetProperties(CGImageDestinationRef __nonnull idst, CFDictionaryRef __nullable properties);

    //向CGImageDestination中添加一张图片 其中的option参数意义和上面一致,设置此图片的质量与无alpha默认背景色

    void CGImageDestinationAddImage(CGImageDestinationRef __nonnull idst, CGImageRef __nonnull image, CFDictionaryRef __nullable properties);

    //通过CGImageSource对象来向CGImageDestination中添加图片

    void CGImageDestinationAddImageFromSource(CGImageDestinationRef __nonnull idst, CGImageSourceRef __nonnull isrc, size_t index, CFDictionaryRef __nullable properties);

    //进行写入操作 执行此方法后 不可以在写入其他信息

    bool CGImageDestinationFinalize(CGImageDestinationRef __nonnull idst);

    //添加图片元信息

    void CGImageDestinationAddImageAndMetadata(CGImageDestinationRef __nonnull idst, CGImageRef __nonnull image, CGImageMetadataRef __nullable metadata, CFDictionaryRef __nullable options);

    //将CGImageSource信息拷贝进CGImageDestination

    /*

    options参数可以用来添加元信息

    */

    bool CGImageDestinationCopyImageSource(CGImageDestinationRef __nonnull idst, CGImageSourceRef __nonnull isrc, CFDictionaryRef __nullable options, __nullable CFErrorRef * __nullable err);

    上面列举的方法中,CGImageDestinationCopyImageSource()方法中的options参数可以添加一些图片的元信息,可以设置的键值对意义如下:

    //设置元信息 需要设置为CGImageMetadataRef对象

    const CFStringRef kCGImageDestinationMetadata;

    //是否将CGImageSource的元信息信息合并操作 默认为kCFBooleanFalse

    const CFStringRef kCGImageDestinationMergeMetadata;

    //XMP数据是否不被写入 默认为kCFBooleanFalse

    const CFStringRef kCGImageMetadataShouldExcludeXMP;

    //GPS信息是否不被写入 默认为kCFBooleanFalse

    const CFStringRef kCGImageMetadataShouldExcludeGPS;

    //更新元数据的时间值 需要设置为CFStringRef或者CFDateRef

    const CFStringRef kCGImageDestinationDateTime;

    //更新元数据的方向值 需要设置为NSNumber1-8

    const CFStringRef kCGImageDestinationOrientation;

    四、关于CGImageMetadata

    前面我们很多次提到元数据,CGImageMetadata类就是元数据的抽象,其中封装了一些方法供开发者读取或写入元数据信息。奇怪的是Apple的官方文档与API文档中并没有CGImageMetadata的介绍与解释,博客中本部分的内容,多出自我的理解,有疏漏和不对的地方,清楚的朋友可以指点与建议。

        前边介绍,CGImageSource中有获取图片元数据的方法,CGImageDestination中也有写入图片元数据的方法,元数据中抽象出的CGImageMetadataTag是对具体数据内容的封装。CGImageMetadata解析如下:

    //获取CGImageMetadata类的CFTypeID

    CFTypeID CGImageMetadataGetTypeID(void);

    //创建一个空的可变的CGImageMetadata对象

    CGMutableImageMetadataRef __nonnull CGImageMetadataCreateMutable(void);

    //拷贝一个可变的CGImageMetadata对象

    CGMutableImageMetadataRef __nullable CGImageMetadataCreateMutableCopy(CGImageMetadataRef __nonnull metadata);

    //获取CGImageMetadataTag类的CFTypeID

    CFTypeID CGImageMetadataTagGetTypeID(void);

    //创建一个CGImageMetadataTag对象

    /*

    这个方法比较复杂

    xmlns参数设置命名空间

    prefix参数设置命名空间的缩写或前缀

    name参数设置CGImageMetadataTag的名称

    type参数设置CGImageMetadataTag对应值的类型

    value参数设置CGImageMetadataTag的对应值

    */

    CGImageMetadataTagRef __nullable CGImageMetadataTagCreate (CFStringRef __nonnull xmlns, CFStringRef __nullable prefix, CFStringRef __nonnull name, CGImageMetadataType type, CFTypeRef __nonnull value);

    上面创建CGImageMetadataTag的方法中,xmlns设置命名空间,必须使用一个预定义的命名空间或者自定义的命名空间,对于自定义的命名空间,必须遵守Adobe的XMP规范。一些共用的命名空间定义如下:

    //Exif命名空间

    const CFStringRef  kCGImageMetadataNamespaceExif;

    //ExifAux命名空间

    const CFStringRef  kCGImageMetadataNamespaceExifAux;

    //ExifEX命名空间

    const CFStringRef  kCGImageMetadataNamespaceExifEX;

    //DublineCore命名空间

    const CFStringRef  kCGImageMetadataNamespaceDublinCore;

    //IPTCCore命名空间

    const CFStringRef  kCGImageMetadataNamespaceIPTCCore;

    //Photoshop命名空间

    const CFStringRef  kCGImageMetadataNamespacePhotoshop;

    //TIFF命名空间

    const CFStringRef  kCGImageMetadataNamespaceTIFF;

    //XMPBasic命名空间

    const CFStringRef  kCGImageMetadataNamespaceXMPBasic;

    //XMPRights命名空间

    const CFStringRef  kCGImageMetadataNamespaceXMPRights;

    上面创建CGImageMetadataTag的方法中prefix设置命名空间缩写或前缀,同样一些公用的前缀定义如下:

    //Exif命名空间前缀

    const CFStringRef  kCGImageMetadataPrefixExif;

    //ExifAux命名空间前缀

    const CFStringRef  kCGImageMetadataPrefixExifAux;

    //ExifEX命名空间前缀

    const CFStringRef  kCGImageMetadataPrefixExifEX;

    //DublinCore命名空间前缀

    const CFStringRef  kCGImageMetadataPrefixDublinCore;

    //IPCCore命名空间前缀

    const CFStringRef  kCGImageMetadataPrefixIPTCCore;

    //Photoshop命名空间前缀

    const CFStringRef  kCGImageMetadataPrefixPhotoshop;

    //TIFF命名空间前缀

    const CFStringRef  kCGImageMetadataPrefixTIFF;

    //XMPBasic命名空间前缀

    const CFStringRef  kCGImageMetadataPrefixXMPBasic;

    //XMPRights命名空间前缀

    const CFStringRef  kCGImageMetadataPrefixXMPRights;

    上面创建CGImageMetadataTag的方法中type设置对应值的类型,其是一个CGImageMetadataType类型的枚举,意义如下:

    typedef CF_ENUM(int32_t, CGImageMetadataType) {

        //无效的数据类型

        kCGImageMetadataTypeInvalid = -1,

        //基本的CFType类型

        kCGImageMetadataTypeDefault = 0,

        //字符串类型

        kCGImageMetadataTypeString = 1,

        //无需集合类型

        kCGImageMetadataTypeArrayUnordered = 2,

        //有序集合类型

        kCGImageMetadataTypeArrayOrdered = 3,

        //有序阵列

        kCGImageMetadataTypeAlternateArray = 4,

        //特殊的数组 其中元素进行不同的本地化

        kCGImageMetadataTypeAlternateText = 5,

        //结构类型 如字典

        kCGImageMetadataTypeStructure = 6

    };

    获取到CGImageMetadataTag后,可以通过如下方法来获取其中封装的信息:

    //获取标签的命名空间

    CFStringRef __nullable CGImageMetadataTagCopyNamespace(CGImageMetadataTagRef __nonnull tag);

    //获取标签的命名空间前缀

    CFStringRef __nullable CGImageMetadataTagCopyPrefix(CGImageMetadataTagRef __nonnull tag);

    //获取标签名称

    CFStringRef __nullable CGImageMetadataTagCopyName(CGImageMetadataTagRef __nonnull tag);

    //获取标签的值

    CFTypeRef __nullable CGImageMetadataTagCopyValue(CGImageMetadataTagRef __nonnull tag);

    //获取标签值的类型

    CGImageMetadataType CGImageMetadataTagGetType(CGImageMetadataTagRef __nonnull tag);

    //获取标签的Qualifier数组

    CFArrayRef __nullable CGImageMetadataTagCopyQualifiers(CGImageMetadataTagRef __nonnull tag);

    下面这些方法用于向CGImageMetadata中添加标签或者获取标签:

    //获取CGImageMetadata中的所有标签

    CFArrayRef __nullable CGImageMetadataCopyTags(CGImageMetadataRef __nonnull metadata);

    //通过路径查找特殊的标签

    CGImageMetadataTagRef __nullable CGImageMetadataCopyTagWithPath(CGImageMetadataRef __nonnull metadata, CGImageMetadataTagRef __nullable parent, CFStringRef __nonnull path);

    //通过路径查找特殊标签的值

    CFStringRef __nullable CGImageMetadataCopyStringValueWithPath(CGImageMetadataRef __nonnull metadata, CGImageMetadataTagRef __nullable parent, CFStringRef __nonnull path);

    //为一个前缀注册一个命名空间

    bool CGImageMetadataRegisterNamespaceForPrefix(CGMutableImageMetadataRef __nonnull metadata, CFStringRef __nonnull xmlns, CFStringRef __nonnull prefix, __nullable CFErrorRef * __nullable err);

    //通过路径为CGImageMetadata设置标签

    bool CGImageMetadataSetTagWithPath(CGMutableImageMetadataRef __nonnull metadata, CGImageMetadataTagRef __nullable parent, CFStringRef __nonnull path, CGImageMetadataTagRef __nonnull tag);

    //通过路径为CGImageMetadata设置标签的值

    bool CGImageMetadataSetValueWithPath(CGMutableImageMetadataRef __nonnull metadata, CGImageMetadataTagRef __nullable parent, CFStringRef __nonnull path, CFTypeRef __nonnull value);

    //通过路径移除一个标签

    bool CGImageMetadataRemoveTagWithPath(CGMutableImageMetadataRef __nonnull metadata,  CGImageMetadataTagRef __nullable parent, CFStringRef __nonnull path);

    //对标签进行枚举

    void CGImageMetadataEnumerateTagsUsingBlock(CGImageMetadataRef __nonnull metadata, CFStringRef __nullable rootPath, CFDictionaryRef __nullable options, CGImageMetadataTagBlock __nonnull block);

    五、CGImageProperties中定义的字典意义

        前面提到的CGImageSourceCopyProperties方法与CGImageSourceCopyPropertiesAtIndex方法都会返回一个字典,字典中可能包含如下有意义的键:

    //TIFF信息字典

    const CFStringRef kCGImagePropertyTIFFDictionary;

    /GIF信息字典

    const CFStringRef kCGImagePropertyGIFDictionary;

    //JFIF信息字典

    const CFStringRef kCGImagePropertyJFIFDictionary;

    //EXif信息字典

    const CFStringRef kCGImagePropertyExifDictionary;

    //PNG信息字典

    const CFStringRef kCGImagePropertyPNGDictionary;

    //IPTC信息字典

    const CFStringRef kCGImagePropertyIPTCDictionary;

    //GPS信息字典

    const CFStringRef kCGImagePropertyGPSDictionary;

    //原始信息字典

    const CFStringRef kCGImagePropertyRawDictionary;

    //CIFF信息字典

    const CFStringRef kCGImagePropertyCIFFDictionary;

    //佳能相机信息字典

    const CFStringRef kCGImagePropertyMakerCanonDictionary;

    //尼康相机信息字典

    const CFStringRef kCGImagePropertyMakerNikonDictionary;

    //柯尼卡相机信息字典

    const CFStringRef kCGImagePropertyMakerMinoltaDictionary;

    //富士相机信息字典

    const CFStringRef kCGImagePropertyMakerFujiDictionary;

    //奥林巴斯相机信息字典

    const CFStringRef kCGImagePropertyMakerOlympusDictionary;

    //宾得相机信息字典

    const CFStringRef kCGImagePropertyMakerPentaxDictionary;

    //对应Photoshop相片的信息字典

    const CFStringRef kCGImageProperty8BIMDictionary;

    //NDG信息字典

    const CFStringRef kCGImagePropertyDNGDictionary ;

    //ExifAux信息字典

    const CFStringRef kCGImagePropertyExifAuxDictionary;

    //OpenEXR信息字典

    const CFStringRef kCGImagePropertyOpenEXRDictionary;

    //Apple相机信息字典

    const CFStringRef kCGImagePropertyMakerAppleDictionary ;

    CGImageSourceCopyProperties方法返回的字典中还可能会有如下一个特殊的键:

    //对应文件大小

    const CFStringRef kCGImagePropertyFileSize;

    CGImageSourceCopyPropertiesAtIndex方法中可能包含的特殊键:

    //像素高度

    const CFStringRef kCGImagePropertyPixelHeight;

    //像素宽度

    const CFStringRef kCGImagePropertyPixelWidth;

    //DPI高度

    const CFStringRef kCGImagePropertyDPIHeight;

    //DPI宽度

    const CFStringRef kCGImagePropertyDPIWidth;

    //颜色位数

    const CFStringRef kCGImagePropertyDepth;

    //图片的显示方向

    /*

    对应Number值

    *  1  =  左上到右下. 

    *  2  =  右上到左下. 

    *  3  =  右下到左上.

    *  4  =  左下到右上. 

    *  5  =  行列置换 左上到右下. 

    *  6  =  行列置换 右上到左下. 

    *  7  =  行列置换 右下到左上. 

    *  8  =  行列置换 左下到右上.

    */

    const CFStringRef kCGImagePropertyOrientation;

    //颜色是否支持浮点数

    const CFStringRef kCGImagePropertyIsFloat;

    //图像是否包含像素样本

    const CFStringRef kCGImagePropertyIsIndexed;

    //图像是否包含alpha通道

    const CFStringRef kCGImagePropertyHasAlpha;

    //图像的颜色模式

    const CFStringRef kCGImagePropertyColorModel;

    //嵌入图片的ICC配置文件名称

    const CFStringRef kCGImagePropertyProfileName;

    kCGImagePropertyColorModel键可返回的值有如下几种定义:

    //RBG模式

    const CFStringRef kCGImagePropertyColorModelRGB;

    //Gray模式

    const CFStringRef kCGImagePropertyColorModelGray;

    //CMYK模式

    const CFStringRef kCGImagePropertyColorModelCMYK;

    //Lab模式

    const CFStringRef kCGImagePropertyColorModelLab;

    kCGImagePropertyTIFFDictionary键可返回的值定义如下:

    //图片数据压缩方案

    const CFStringRef kCGImagePropertyTIFFCompression;

    //图片数据的色彩空间

    const CFStringRef kCGImagePropertyTIFFPhotometricInterpretation;

    //文档名称

    const CFStringRef kCGImagePropertyTIFFDocumentName;

    //图片描述

    const CFStringRef kCGImagePropertyTIFFImageDescription;

    //相机设备名

    const CFStringRef kCGImagePropertyTIFFMake;

    //相机设备模式

    const CFStringRef kCGImagePropertyTIFFModel;

    //图片方向

    const CFStringRef kCGImagePropertyTIFFOrientation;

    //横向每个分辨位的像素数

    const CFStringRef kCGImagePropertyTIFFXResolution;

    //纵向每个分辨位的像素数

    const CFStringRef kCGImagePropertyTIFFYResolution;

    //分辨率单位

    const CFStringRef kCGImagePropertyTIFFResolutionUnit;

    //创建图像的软件名称和版本

    const CFStringRef kCGImagePropertyTIFFSoftware;

    //transform函数

    const CFStringRef kCGImagePropertyTIFFTransferFunction;

    //日期时间

    const CFStringRef kCGImagePropertyTIFFDateTime;

    //作者

    const CFStringRef kCGImagePropertyTIFFArtist;

    //创建图片的电脑系统

    const CFStringRef kCGImagePropertyTIFFHostComputer;

    //公司信息

    const CFStringRef kCGImagePropertyTIFFCopyright;

    //图片的白点

    const CFStringRef kCGImagePropertyTIFFWhitePoint;

    //图像的原色色度

    const CFStringRef kCGImagePropertyTIFFPrimaryChromaticities;

    //图片的瓦片宽度

    const CFStringRef kCGImagePropertyTIFFTileWidth;

    //图片的瓦片高度

    const CFStringRef kCGImagePropertyTIFFTileLength;

    kCGImagePropertyJFIFDictionary对应的字典中可能包含如下意义的键:

    //JFIF版本

    const CFStringRef kCGImagePropertyJFIFVersion;

    //横向像素密度

    const CFStringRef kCGImagePropertyJFIFXDensity;

    //纵向像素密度

    const CFStringRef kCGImagePropertyJFIFYDensity;

    //像素密度单元

    const CFStringRef kCGImagePropertyJFIFDensityUnit;

    //是否是高质量图像版本

    const CFStringRef kCGImagePropertyJFIFIsProgressive;

    kCGImagePropertyExifDictionary对应的字典中可能包含如下意义的键 :

    //曝光时间

    const CFStringRef kCGImagePropertyExifExposureTime;

    //ExifNumber

    const CFStringRef kCGImagePropertyExifFNumber;

    //曝光程序

    const CFStringRef kCGImagePropertyExifExposureProgram;

    //每个通道的光谱灵敏度

    const CFStringRef kCGImagePropertyExifSpectralSensitivity;

    //ISO速度等级

    const CFStringRef kCGImagePropertyExifISOSpeedRatings;

    //ExifOECF

    const CFStringRef kCGImagePropertyExifOECF;

    //灵敏类型

    const CFStringRef kCGImagePropertyExifSensitivityType;

    //输出灵敏标准

    const CFStringRef kCGImagePropertyExifStandardOutputSensitivity;

    //推荐曝光指数

    const CFStringRef kCGImagePropertyExifRecommendedExposureIndex;

    //ISO速率

    const CFStringRef kCGImagePropertyExifISOSpeed;

    const CFStringRef kCGImagePropertyExifISOSpeedLatitudeyyy;

    const CFStringRef kCGImagePropertyExifISOSpeedLatitudezzz;

    //Exif版本

    const CFStringRef kCGImagePropertyExifVersion;

    //原始日期时间

    const CFStringRef kCGImagePropertyExifDateTimeOriginal;

    //数字化日期时间

    const CFStringRef kCGImagePropertyExifDateTimeDigitized;

    //压缩配置

    const CFStringRef kCGImagePropertyExifComponentsConfiguration;

    //压缩模式像素位

    const CFStringRef kCGImagePropertyExifCompressedBitsPerPixel;

    //快门速度值

    const CFStringRef kCGImagePropertyExifShutterSpeedValue;

    //孔径值

    const CFStringRef kCGImagePropertyExifApertureValue;

    //亮度值

    const CFStringRef kCGImagePropertyExifBrightnessValue;

    //曝光偏差值

    const CFStringRef kCGImagePropertyExifExposureBiasValue;

    //最大光圈值

    const CFStringRef kCGImagePropertyExifMaxApertureValue;

    //距离

    const CFStringRef kCGImagePropertyExifSubjectDistance;

    //测光模式

    const CFStringRef kCGImagePropertyExifMeteringMode;

    //光源

    const CFStringRef kCGImagePropertyExifLightSource;

    //拍摄时的闪光状态

    const CFStringRef kCGImagePropertyExifFlash;

    //焦距

    const CFStringRef kCGImagePropertyExifFocalLength;

    //主体区域

    const CFStringRef kCGImagePropertyExifSubjectArea;

    //相机制造商指定的信息

    const CFStringRef kCGImagePropertyExifMakerNote;

    //用户信息

    const CFStringRef kCGImagePropertyExifUserComment;

    //日期和时间标记的秒分数

    const CFStringRef kCGImagePropertyExifSubsecTime;

    //原始时间

    const CFStringRef kCGImagePropertyExifSubsecTimeOriginal;

    //数字时间

    const CFStringRef kCGImagePropertyExifSubsecTimeDigitized;

    //FlashPix版本信息

    const CFStringRef kCGImagePropertyExifFlashPixVersion;

    //色彩空间

    const CFStringRef kCGImagePropertyExifColorSpace;

    //X方向像素

    const CFStringRef kCGImagePropertyExifPixelXDimension;

    //Y方向像素

    const CFStringRef kCGImagePropertyExifPixelYDimension;

    //与图像相关的声音文件

    const CFStringRef kCGImagePropertyExifRelatedSoundFile;

    //FlashEnergy

    const CFStringRef kCGImagePropertyExifFlashEnergy;

    //FrequencyResponse

    const CFStringRef kCGImagePropertyExifSpatialFrequencyResponse;

    //像素数目

    const CFStringRef kCGImagePropertyExifFocalPlaneXResolution;

    const CFStringRef kCGImagePropertyExifFocalPlaneYResolution;

    const CFStringRef kCGImagePropertyExifFocalPlaneResolutionUnit;

    //图像主体的位置

    const CFStringRef kCGImagePropertyExifSubjectLocation;

    //选择的曝光指数

    const CFStringRef kCGImagePropertyExifExposureIndex;

    //传感器类型

    const CFStringRef kCGImagePropertyExifSensingMethod;

    //图像文件源

    const CFStringRef kCGImagePropertyExifFileSource;

    //场景类型

    const CFStringRef kCGImagePropertyExifSceneType;

    //CFA模块

    const CFStringRef kCGImagePropertyExifCFAPattern;

    //对图像数据进行特殊渲染

    const CFStringRef kCGImagePropertyExifCustomRendered;

    //曝光模式设置

    const CFStringRef kCGImagePropertyExifExposureMode;

    //白平衡模式

    const CFStringRef kCGImagePropertyExifWhiteBalance;

    //数字变焦比

    const CFStringRef kCGImagePropertyExifDigitalZoomRatio;

    //35毫米胶片的等效焦距

    const CFStringRef kCGImagePropertyExifFocalLenIn35mmFilm;

    //场景捕捉类型(标准,景观,肖像,夜晚)

    const CFStringRef kCGImagePropertyExifSceneCaptureType;

    //图像增益

    const CFStringRef kCGImagePropertyExifGainControl;

    //图像对比度

    const CFStringRef kCGImagePropertyExifContrast;

    //图像饱和度

    const CFStringRef kCGImagePropertyExifSaturation;

    //图像锐度

    const CFStringRef kCGImagePropertyExifSharpness;

    //拍摄条件

    const CFStringRef kCGImagePropertyExifDeviceSettingDescription;

    //主体距离

    const CFStringRef kCGImagePropertyExifSubjectDistRange;

    //图像的唯一标识

    const CFStringRef kCGImagePropertyExifImageUniqueID;

    //相机所有者

    const CFStringRef kCGImagePropertyExifCameraOwnerName;

    //相机序列号

    const CFStringRef kCGImagePropertyExifBodySerialNumber;

    //透镜规格信息

    const CFStringRef kCGImagePropertyExifLensSpecification;

    //透镜制造商名称

    const CFStringRef kCGImagePropertyExifLensMake;

    //透镜模式

    const CFStringRef kCGImagePropertyExifLensModel;

    //透镜序列号

    const CFStringRef kCGImagePropertyExifLensSerialNumber;

    //伽马设置

    const CFStringRef kCGImagePropertyExifGamma;

    kCGImagePropertyExifAuxDictionary对应的字典中可能包含的键定义如下:

    //镜头信息

    const CFStringRef kCGImagePropertyExifAuxLensInfo;

    //镜头模式

    const CFStringRef kCGImagePropertyExifAuxLensModel;

    //序列号

    const CFStringRef kCGImagePropertyExifAuxSerialNumber;

    //镜头ID

    const CFStringRef kCGImagePropertyExifAuxLensID;

    //镜头序列号

    const CFStringRef kCGImagePropertyExifAuxLensSerialNumber;

    //图片编号

    const CFStringRef kCGImagePropertyExifAuxImageNumber;

    //闪光补偿

    const CFStringRef kCGImagePropertyExifAuxFlashCompensation;

    //所有者名称

    const CFStringRef kCGImagePropertyExifAuxOwnerName;

    //固件信息

    const CFStringRef kCGImagePropertyExifAuxFirmware;

    kCGImagePropertyGIFDictionary对应的字典中可能包含的键定义如下:

    //动画循环次数

    const CFStringRef kCGImagePropertyGIFLoopCount;

    //两帧之间的延时

    const CFStringRef kCGImagePropertyGIFDelayTime;

    //颜色Map

    const CFStringRef kCGImagePropertyGIFImageColorMap;

    const CFStringRef kCGImagePropertyGIFHasGlobalColorMap;

    //两帧之间的延时

    const CFStringRef kCGImagePropertyGIFUnclampedDelayTime;

    kCGImagePropertyPNGDictionary对应的字典中可能包含的键定义如下:

    //PNG伽马值

    const CFStringRef kCGImagePropertyPNGGamma;

    //混合类型

    const CFStringRef kCGImagePropertyPNGInterlaceType;

    //X方向像素数

    const CFStringRef kCGImagePropertyPNGXPixelsPerMeter;

    //Y方向像素数

    const CFStringRef kCGImagePropertyPNGYPixelsPerMeter;

    //RGB意图

    const CFStringRef kCGImagePropertyPNGsRGBIntent;

    //色度

    const CFStringRef kCGImagePropertyPNGChromaticities;

    //作者

    const CFStringRef kCGImagePropertyPNGAuthor;

    //公司

    const CFStringRef kCGImagePropertyPNGCopyright;

    //创建时间

    const CFStringRef kCGImagePropertyPNGCreationTime;

    //描述

    const CFStringRef kCGImagePropertyPNGDescription;

    //最后修改日期时间

    const CFStringRef kCGImagePropertyPNGModificationTime;

    //软件

    const CFStringRef kCGImagePropertyPNGSoftware;

    //标题

    const CFStringRef kCGImagePropertyPNGTitle;

    //动画循环次数

    const CFStringRef kCGImagePropertyAPNGLoopCount;

    //两帧之间的延时

    const CFStringRef kCGImagePropertyAPNGDelayTime;

    const CFStringRef kCGImagePropertyAPNGUnclampedDelayTime;

    kCGImagePropertyGPSDictionary对应的字典中可能包含的键定义如下:

    //GPS版本

    const CFStringRef kCGImagePropertyGPSVersion;

    //纬度是南纬或北纬

    const CFStringRef kCGImagePropertyGPSLatitudeRef;

    //纬度

    const CFStringRef kCGImagePropertyGPSLatitude;

    //经度是东经或西经

    const CFStringRef kCGImagePropertyGPSLongitudeRef;

    //经度

    const CFStringRef kCGImagePropertyGPSLongitude;

    //海拔标准

    const CFStringRef kCGImagePropertyGPSAltitudeRef;

    //海拔高度

    const CFStringRef kCGImagePropertyGPSAltitude;

    //时间戳

    const CFStringRef kCGImagePropertyGPSTimeStamp;

    //测量GPS的卫星

    const CFStringRef kCGImagePropertyGPSSatellites;

    //GPS状态

    const CFStringRef kCGImagePropertyGPSStatus;

    //测量模式

    const CFStringRef kCGImagePropertyGPSMeasureMode;

    //精度数据

    const CFStringRef kCGImagePropertyGPSDOP;

    //速度标准

    const CFStringRef kCGImagePropertyGPSSpeedRef;

    //速度

    const CFStringRef kCGImagePropertyGPSSpeed;

    //运动方向参考

    const CFStringRef kCGImagePropertyGPSTrackRef;

    //运动方向

    const CFStringRef kCGImagePropertyGPSTrack;

    //位置方向参考

    const CFStringRef kCGImagePropertyGPSImgDirectionRef;

    //位置方向

    const CFStringRef kCGImagePropertyGPSImgDirection;

    //地图测量数据

    const CFStringRef kCGImagePropertyGPSMapDatum;

    //地理纬度南纬或北纬

    const CFStringRef kCGImagePropertyGPSDestLatitudeRef;

    //地理纬度

    const CFStringRef kCGImagePropertyGPSDestLatitude;

    //地理经度 东经或西经

    const CFStringRef kCGImagePropertyGPSDestLongitudeRef;

    //地理经度

    const CFStringRef kCGImagePropertyGPSDestLongitude;

    //方位参照

    const CFStringRef kCGImagePropertyGPSDestBearingRef;

    //地理方位

    const CFStringRef kCGImagePropertyGPSDestBearing;

    //距离参照

    const CFStringRef kCGImagePropertyGPSDestDistanceRef;

    //距离

    const CFStringRef kCGImagePropertyGPSDestDistance;

    //查找地理位置的方法

    const CFStringRef kCGImagePropertyGPSProcessingMethod;

    //GPS地区名

    const CFStringRef kCGImagePropertyGPSAreaInformation;

    //日期时间

    const CFStringRef kCGImagePropertyGPSDateStamp;

    //校正信息

    const CFStringRef kCGImagePropertyGPSDifferental;

    //错误信息

    const CFStringRef kCGImagePropertyGPSHPositioningError;

    kCGImagePropertyIPTCDictionary对应的字典中可能包含的键定义如下:

    //对象类型

    const CFStringRef kCGImagePropertyIPTCObjectTypeReference;

    //对象属性

    const CFStringRef kCGImagePropertyIPTCObjectAttributeReference;

    //对象名称

    const CFStringRef kCGImagePropertyIPTCObjectName;

    //编辑状态

    const CFStringRef kCGImagePropertyIPTCEditStatus;

    //更新状态

    const CFStringRef kCGImagePropertyIPTCEditorialUpdate;

    //紧急等级

    const CFStringRef kCGImagePropertyIPTCUrgency;

    //主体

    const CFStringRef kCGImagePropertyIPTCSubjectReference;

    //类别

    const CFStringRef kCGImagePropertyIPTCCategory;

    //补充类别

    const CFStringRef kCGImagePropertyIPTCSupplementalCategory;

    //Fixture标识

    const CFStringRef kCGImagePropertyIPTCFixtureIdentifier;

    //关键字

    const CFStringRef kCGImagePropertyIPTCKeywords;

    //内容定位码

    const CFStringRef kCGImagePropertyIPTCContentLocationCode;

    //内容位置名称

    const CFStringRef kCGImagePropertyIPTCContentLocationName;

    //图像使用的最早日期

    const CFStringRef kCGImagePropertyIPTCReleaseDate;

    //图像使用的最早时间

    const CFStringRef kCGImagePropertyIPTCReleaseTime;

    //最后一次使用日期

    const CFStringRef kCGImagePropertyIPTCExpirationDate;

    //最后一次使用时间

    const CFStringRef kCGImagePropertyIPTCExpirationTime;

    //图像使用的特别说明

    const CFStringRef kCGImagePropertyIPTCSpecialInstructions;

    //建议行为

    const CFStringRef kCGImagePropertyIPTCActionAdvised;

    //服务参考

    const CFStringRef kCGImagePropertyIPTCReferenceService;

    //日期参考

    const CFStringRef kCGImagePropertyIPTCReferenceDate;

    //参考码

    const CFStringRef kCGImagePropertyIPTCReferenceNumber;

    //创建日期

    const CFStringRef kCGImagePropertyIPTCDateCreated;

    //创建时间

    const CFStringRef kCGImagePropertyIPTCTimeCreated;

    //数字创建日期

    const CFStringRef kCGImagePropertyIPTCDigitalCreationDate;

    //数字创建时间

    const CFStringRef kCGImagePropertyIPTCDigitalCreationTime;

    //原始程序

    const CFStringRef kCGImagePropertyIPTCOriginatingProgram;

    //程序版本

    const CFStringRef kCGImagePropertyIPTCProgramVersion;

    图像的编辑周期(早晨,晚上或两者)。

    const CFStringRef kCGImagePropertyIPTCObjectCycle;

    //不想创建者名称

    const CFStringRef kCGImagePropertyIPTCByline;

    //图像创建标题

    const CFStringRef kCGImagePropertyIPTCBylineTitle;

    //城市信息

    const CFStringRef kCGImagePropertyIPTCCity;

    //城市内位置

    const CFStringRef kCGImagePropertyIPTCSubLocation;

    //省份

    const CFStringRef kCGImagePropertyIPTCProvinceState;

    //国家编码

    const CFStringRef kCGImagePropertyIPTCCountryPrimaryLocationCode;

    //国家名称

    const CFStringRef kCGImagePropertyIPTCCountryPrimaryLocationName;

    //OriginalTransmission参考

    const CFStringRef kCGImagePropertyIPTCOriginalTransmissionReference;

    //图像内容摘要

    const CFStringRef kCGImagePropertyIPTCHeadline;

    //提供图像服务的名称

    const CFStringRef kCGImagePropertyIPTCCredit;

    //图像源

    const CFStringRef kCGImagePropertyIPTCSource;

    //公司提示

    const CFStringRef kCGImagePropertyIPTCCopyrightNotice;

    //联系人

    const CFStringRef kCGImagePropertyIPTCContact;

    //描述

    const CFStringRef kCGImagePropertyIPTCCaptionAbstract;

    //图像编辑者

    const CFStringRef kCGImagePropertyIPTCWriterEditor;

    //图像类型

    const CFStringRef kCGImagePropertyIPTCImageType;

    //方向信息

    const CFStringRef kCGImagePropertyIPTCImageOrientation;

    //语言信息

    const CFStringRef kCGImagePropertyIPTCLanguageIdentifier;

    //星级

    const CFStringRef kCGImagePropertyIPTCStarRating;

    //联系人详细信息

    const CFStringRef kCGImagePropertyIPTCCreatorContactInfo;

    //图像使用权限

    const CFStringRef kCGImagePropertyIPTCRightsUsageTerms;

    //场景代码

    const CFStringRef kCGImagePropertyIPTCScene;

    上面的kCGImagePropertyIPTCCreatorContactInfo对应的字典中键的定义如下:

    //联系人城市

    const CFStringRef kCGImagePropertyIPTCContactInfoCity;

    //联系人国家

    const CFStringRef kCGImagePropertyIPTCContactInfoCountry;

    //联系人地址

    const CFStringRef kCGImagePropertyIPTCContactInfoAddress;

    //邮编

    const CFStringRef kCGImagePropertyIPTCContactInfoPostalCode;

    //省份

    const CFStringRef kCGImagePropertyIPTCContactInfoStateProvince;

    //电子邮件

    const CFStringRef kCGImagePropertyIPTCContactInfoEmails;

    //电话

    const CFStringRef kCGImagePropertyIPTCContactInfoPhones;

    //网址

    const CFStringRef kCGImagePropertyIPTCContactInfoWebURLs;

    kCGImageProperty8BIMDictionary对应的字典中可能包含的键定义如下:

    //Photoshop文件的图层名

    const CFStringRef  kCGImageProperty8BIMLayerNames;

    //版本

    const CFStringRef  kCGImageProperty8BIMVersion;

    kCGImagePropertyDNGDictionary对应的字典中可能包含的键定义如下:

    //DNG版本

    const CFStringRef  kCGImagePropertyDNGVersion;

    //兼容的最老版本

    const CFStringRef  kCGImagePropertyDNGBackwardVersion;

    //摄像机模型

    const CFStringRef  kCGImagePropertyDNGUniqueCameraModel;

    const CFStringRef  kCGImagePropertyDNGLocalizedCameraModel;

    //相机序列码

    const CFStringRef  kCGImagePropertyDNGCameraSerialNumber;

    //镜头信息

    const CFStringRef  kCGImagePropertyDNGLensInfo;

    //黑度等级

    const CFStringRef  kCGImagePropertyDNGBlackLevel;

    //白度等级

    const CFStringRef  kCGImagePropertyDNGWhiteLevel;

    const CFStringRef  kCGImagePropertyDNGCalibrationIlluminant1;

    const CFStringRef  kCGImagePropertyDNGCalibrationIlluminant2;

    const CFStringRef  kCGImagePropertyDNGColorMatrix1;

    const CFStringRef  kCGImagePropertyDNGColorMatrix2;

    const CFStringRef  kCGImagePropertyDNGCameraCalibration1;

    const CFStringRef  kCGImagePropertyDNGCameraCalibration2;

    const CFStringRef  kCGImagePropertyDNGAsShotNeutral;

    const CFStringRef  kCGImagePropertyDNGAsShotWhiteXY;

    const CFStringRef  kCGImagePropertyDNGBaselineExposure;

    const CFStringRef  kCGImagePropertyDNGBaselineNoise;

    const CFStringRef  kCGImagePropertyDNGBaselineSharpness;

    const CFStringRef  kCGImagePropertyDNGPrivateData;

    const CFStringRef  kCGImagePropertyDNGCameraCalibrationSignature;

    const CFStringRef  kCGImagePropertyDNGProfileCalibrationSignature;

    const CFStringRef  kCGImagePropertyDNGNoiseProfile;

    const CFStringRef  kCGImagePropertyDNGWarpRectilinear;

    const CFStringRef  kCGImagePropertyDNGWarpFisheye;

    const CFStringRef  kCGImagePropertyDNGFixVignetteRadial;

    kCGImagePropertyCIFFDictionary对应的字典中可能包含的键定义如下:

    //相机信息

    const CFStringRef  kCGImagePropertyCIFFDescription;

    //固件版本

    const CFStringRef  kCGImagePropertyCIFFFirmware;

    //所有者名称

    const CFStringRef  kCGImagePropertyCIFFOwnerName;

    //图片名

    const CFStringRef  kCGImagePropertyCIFFImageName;

    //图片文件名

    const CFStringRef  kCGImagePropertyCIFFImageFileName;

    //曝光方式

    const CFStringRef  kCGImagePropertyCIFFReleaseMethod;

    //曝光时间

    const CFStringRef  kCGImagePropertyCIFFReleaseTiming;

    //RecordID

    const CFStringRef  kCGImagePropertyCIFFRecordID;

    //曝光时间

    const CFStringRef  kCGImagePropertyCIFFSelfTimingTime;

    //相机序列号

    const CFStringRef  kCGImagePropertyCIFFCameraSerialNumber;

    //图片编码

    const CFStringRef  kCGImagePropertyCIFFImageSerialNumber;

    //驱动模式

    const CFStringRef  kCGImagePropertyCIFFContinuousDrive);

    //焦点模式

    const CFStringRef  kCGImagePropertyCIFFFocusMode;

    //测量模式

    const CFStringRef  kCGImagePropertyCIFFMeteringMode;

    //曝光模式

    const CFStringRef  kCGImagePropertyCIFFShootingMode;

    //透镜模式

    const CFStringRef  kCGImagePropertyCIFFLensModel;

    //最长镜头长度

    const CFStringRef  kCGImagePropertyCIFFLensMaxMM;

    //最短镜头长度

    const CFStringRef  kCGImagePropertyCIFFLensMinMM;

    //白平衡等级

    const CFStringRef  kCGImagePropertyCIFFWhiteBalanceIndex;

    //曝光补偿

    const CFStringRef  kCGImagePropertyCIFFFlashExposureComp;

    //实测曝光值

    const CFStringRef  kCGImagePropertyCIFFMeasuredEV);

    六、ImageIO框架在实际开发中的几个应用

    1.显示特殊格式的图片

        在平时开发中,我们通常使用UIImage来读取图片,UIImage支持的图片包括png与jpg等,但是类似windows系统的ico图标,UIImage默认是无法显示的,可以通过ImageIO框架来在iOS系统中使用ico图标,示例如下:

    NSString * path = [[NSBundle mainBundle]pathForResource:@"image" ofType:@"ico"];

        NSURL * url = [NSURL fileURLWithPath:path];

        CGImageRef myImage = NULL;

        CGImageSourceRef myImageSource;

        CFDictionaryRef myOptions = NULL;

        myImageSource = CGImageSourceCreateWithURL((CFURLRef)url, NULL);

        myImage = CGImageSourceCreateImageAtIndex(myImageSource,

                                                  0,

                                                  NULL);

        CFRelease(myImageSource);

        UIImageView * image = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 200, 200)];

        image.image = [UIImage imageWithCGImage:myImage];

    2.读取数码相机拍摄图片的地理位置、时间等信息

    3.对相册中图片的地理位置,时间等信息进行自定义修改。

    4.将自定义格式的图片数据写入本地文件。

    5.展示GIF动图 详情见博客:https://my.oschina.net/u/2340880/blog/608560

    6.渐进渲染大图

    相关文章

      网友评论

          本文标题:ImageIO

          本文链接:https://www.haomeiwen.com/subject/rknmyctx.html