如何在不加载UIImage的情况下获得图像方向?

时间:2014-01-01 06:35:44

标签: ios objective-c uiimage

我的问题非常简单,我想获得图像的方向,但我不想使用[UIImage imageWithData:],因为它消耗内存并且可能很慢。那么,解决方案是什么?图像保存在应用程序的文档文件夹中,而不是ALAssetsLibrary

PS:祝新年快乐!

1 个答案:

答案 0 :(得分:3)

您需要使用较低级别的Quartz函数。将图像的前2K或4K读入NSData对象,然后将该数据传递给增量图像创建器,并询问其方向。如果你没有得到它,请阅读更大的块。 JPG几乎总是拥有前2K数据中的元数据(也许4K,自我编写此代码以来已经有一段时间了):

    {
        CGImageSourceRef imageSourcRef = CGImageSourceCreateIncremental(NULL);
        CGImageSourceUpdateData(imageSourcRef, (__bridge CFDataRef)data, NO);

        CFDictionaryRef dict = CGImageSourceCopyPropertiesAtIndex(imageSourcRef, 0, NULL);
        if(dict) {
            //CFShow(dict);
            self.properties = CFBridgingRelease(dict);
            if(!self.orientation) {
                self.orientation = [[self.properties objectForKey:@"Orientation"] integerValue];
            }
        }
        CFRelease(imageSourcRef);           
    }