訪問圖像屬性而不將圖像加載到內存中

有時您可能想要從圖像文件中檢索某些屬性好乐,例如圖像的尺寸或其他元數(shù)據诈茧,而不會在屏幕上實際顯示全尺寸圖像叠荠。在iOS上最簡單的方法是使用UIImage

    NSString *path = [[NSBundle mainBundle] pathForResource:@"KAR_5160" ofType:@"jpg"];

    UIImage *image = [UIImage imageWithContentsOfFile:path];
    NSLog(@"%@", NSStringFromCGSize(image.size));

這種方法的問題是整個圖像被加載到內存中墓拜。而且由于像素數(shù)據未被壓縮存儲在存儲器中潮售,所以即使是512×512像素(填滿不到iPhone 4屏幕的一半)也將占用1 MB的內存蚁飒。

CGImageSource

從iOS 4開始动壤,SDK包含了CGImageSource...一整套功能的更好的解決方案,這些功能永遠都可以在Mac上使用淮逻。這些功能允許您訪問某些圖像元數(shù)據琼懊,而無需將實際像素數(shù)據加載到內存中。例如爬早,獲取像素尺寸的工作原理如下(確保在您的目標中包含ImageIO.framework):

#import <ImageIO/ImageIO.h>

NSString *path = [[NSBundle mainBundle] pathForResource:@"KAR_5160" ofType:@"jpg"];
//
//    UIImage *image = [UIImage imageWithContentsOfFile:path];
//    NSLog(@"%@", NSStringFromCGSize(image.size));
    
    
    NSURL *imageFileURL = [NSURL fileURLWithPath:path];
    CGImageSourceRef imageSource = CGImageSourceCreateWithURL((CFURLRef)imageFileURL, NULL);
    if (imageSource == NULL) {
        // 圖片加載失敗
        return;
    }
    
    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                             [NSNumber numberWithBool:NO], (NSString *)kCGImageSourceShouldCache,
                             nil];
    CFDictionaryRef imageProperties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, (CFDictionaryRef)options);
    
    if (imageProperties) {
        NSNumber *width = (NSNumber *)CFDictionaryGetValue(imageProperties, kCGImagePropertyPixelWidth);
        NSNumber *height = (NSNumber *)CFDictionaryGetValue(imageProperties, kCGImagePropertyPixelHeight);
        // 打印圖片寬高
        NSLog(@"Image dimensions: %@ x %@ px", width, height);
        CFRelease(imageProperties);
    }
    CFRelease(imageSource);
    
    
    // 獲取想要的元數(shù)據
    // 返回的字典CGImageSourceCopyPropertiesAtIndex()包含的不僅僅是圖像尺寸哼丈。如果存在,它包括完整的EXIF和IPTC元數(shù)據以及TIFF凸椿,GIF削祈,JPEG,PNG和原始文件(以及其他)的各種文件格式特定信息。
    // 舉一個例子髓抑,我們來看一下拍攝照片的日期咙崎,相機的型號名稱和存儲在元數(shù)據中的GPS坐標:

    CFDictionaryRef exif = CFDictionaryGetValue(imageProperties, kCGImagePropertyExifDictionary);
    if (exif) {
        NSString *dateTakenString = (NSString *)CFDictionaryGetValue(exif, kCGImagePropertyExifDateTimeOriginal);
        NSLog(@"Date Taken: %@", dateTakenString);
    }
    
    CFDictionaryRef tiff = CFDictionaryGetValue(imageProperties, kCGImagePropertyTIFFDictionary);
    if (tiff) {
        NSString *cameraModel = (NSString *)CFDictionaryGetValue(tiff, kCGImagePropertyTIFFModel);
        NSLog(@"Camera Model: %@", cameraModel);
    }
    
    CFDictionaryRef gps = CFDictionaryGetValue(imageProperties, kCGImagePropertyGPSDictionary);
    if (gps) {
        NSString *latitudeString = (NSString *)CFDictionaryGetValue(gps, kCGImagePropertyGPSLatitude);
        NSString *latitudeRef = (NSString *)CFDictionaryGetValue(gps, kCGImagePropertyGPSLatitudeRef);
        NSString *longitudeString = (NSString *)CFDictionaryGetValue(gps, kCGImagePropertyGPSLongitude);
        NSString *longitudeRef = (NSString *)CFDictionaryGetValue(gps, kCGImagePropertyGPSLongitudeRef);
        NSLog(@"GPS Coordinates: %@ %@ / %@ %@", longitudeString, longitudeRef, latitudeString, latitudeRef);
    }


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市吨拍,隨后出現(xiàn)的幾起案子褪猛,更是在濱河造成了極大的恐慌,老刑警劉巖羹饰,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件伊滋,死亡現(xiàn)場離奇詭異,居然都是意外死亡队秩,警方通過查閱死者的電腦和手機笑旺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來馍资,“玉大人筒主,你說我怎么就攤上這事∧裥罚” “怎么了乌妙?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長建钥。 經常有香客問我藤韵,道長,這世上最難降的妖魔是什么熊经? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任泽艘,我火速辦了婚禮,結果婚禮上奈搜,老公的妹妹穿的比我還像新娘悉盆。我一直安慰自己盯荤,他們只是感情好馋吗,可當我...
    茶點故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著秋秤,像睡著了一般宏粤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上灼卢,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天绍哎,我揣著相機與錄音,去河邊找鬼鞋真。 笑死崇堰,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播海诲,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼繁莹,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了特幔?” 一聲冷哼從身側響起咨演,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蚯斯,沒想到半個月后薄风,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡拍嵌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年遭赂,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片横辆。...
    茶點故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡嵌牺,死狀恐怖,靈堂內的尸體忽然破棺而出龄糊,到底是詐尸還是另有隱情逆粹,我是刑警寧澤,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布炫惩,位于F島的核電站僻弹,受9級特大地震影響,放射性物質發(fā)生泄漏他嚷。R本人自食惡果不足惜蹋绽,卻給世界環(huán)境...
    茶點故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望筋蓖。 院中可真熱鬧卸耘,春花似錦、人聲如沸粘咖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瓮下。三九已至翰铡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間讽坏,已是汗流浹背锭魔。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留路呜,地道東北人迷捧。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓织咧,卻偏偏與公主長得像,于是被迫代替她去往敵國和親漠秋。 傳聞我的和親對象是個殘疾皇子烦感,可洞房花燭夜當晚...
    茶點故事閱讀 44,647評論 2 354

推薦閱讀更多精彩內容